μ΅œλŒ€ 1 λΆ„ μ†Œμš”

πŸ“ [S3_14501] 퇴사

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main{
	static StringTokenizer st;
	static int N;
	static int[][] arr;
	static int max = 0;
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		
		N = Integer.parseInt(br.readLine());
		
		arr = new int[N][2];
		
		for(int i=0; i<N; i++) {
			st = new StringTokenizer(br.readLine(), " ");
			
			// [0] = κΈ°κ°„ , [1] = κΈˆμ•‘
			arr[i][0] = Integer.parseInt(st.nextToken());
			arr[i][1] = Integer.parseInt(st.nextToken());
		}
		
		
		dfs(0,0);
		sb.append(max);
		System.out.println(max);
		
		
	}
	
	static void dfs(int day,int money) {
		
		// 기저쑰건 : 기간을 μ΄ˆκ³Όν•˜λŠ” 경우
		if(day >= N) {
			max = Math.max(max, money);
			return;
		}
		
		for(int i=day; i<N; i++) {
			if(i+arr[i][0] <= N) {
				dfs(i+arr[i][0], money+arr[i][1]);
			}
			else{
				dfs(i+arr[i][0], money);
			}
		}
    }
}

πŸ€” λ‚˜μ˜ 생각

dfsλ₯Ό μ΄μš©ν•΄μ„œ ν’€μ–΄ μ£Όμ—ˆλ‹€.
μ²˜μŒμ— dfsμ—μ„œμ˜ iλ₯Ό 일수λ₯Ό λ”ν•΄μ€˜μ•Ό ν•˜λŠ”λ° 1을 λ”ν•΄μ£Όμ–΄μ„œ λ¬Έμ œκ°€ μžˆμ—ˆλ‹€.
그리고 일수λ₯Ό λ”ν–ˆμ„λ•Œ N을 λ„˜λŠ” κ²½μš°μ™€ μ•ˆλ„˜λŠ” 경우λ₯Ό λ‚˜λˆ„μ–΄ μž¬κ·€ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•˜μ˜€λ‹€.