코딩테스트/백준

[백준] 퇴사 (Java)

wonow_ 2024. 12. 11. 01:17

퇴사

https://www.acmicpc.net/problem/14501

 

알고리즘 선택과 근거

  • DP + 누적합
    • 단순 구현으로 풀 수 있을 듯하나, DP로 푸는 게 더 좋아보임

 

정답 코드

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

public class Main {
    
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int days = Integer.parseInt(st.nextToken());
        int[] arr = new int[days + 1];

        for (int i = 0; i < days; i++) {
            st = new StringTokenizer(br.readLine());
            int time = Integer.parseInt(st.nextToken());
            int value = Integer.parseInt(st.nextToken());
            int after = i + time;
            if (after <= days) {
                for (int j = after; j <= days; j++) {
                    arr[j] = Math.max(arr[j], arr[i] + value);
                }
            }
        }

        System.out.println(arr[days]);
    }
}

 

 

설명

퇴사일을 넘기는 일들은 제외

일이 끝나는 날부터 끝까지 현재 인덱스 Value + 현재 일 Value 로 갱신함

단, 더 높은 값은 그대로 유지

 

마지막 인덱스 조회 시 가장 높은 Value 를 책정 할 수 있다.