퇴사14501

LJM·2023년 1월 14일
0

백준풀기

목록 보기
35/259

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

어떻게 풀어야 할지 감이 오지 않아서 결국 풀이를 보았고 이해가 되지 않아서 한참 고민하다 풀었다

1)뒤에서 부터 계산해야 한다는것
2)임금합계 배열을 만들어서 해결할 수 있다는 것을 깨닫기 까지 너무 오래걸렸다..

import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());

        int[][] work = new int[N+2][2];

        String[] input;
        for(int i = 1; i <= N; ++i)
        {
            input = br.readLine().split(" ");
            work[i][0] = Integer.parseInt(input[0]);//T 시간
            work[i][1] = Integer.parseInt(input[1]);//P 돈
        }

        int[] money = new int[N+2];
        for(int i = N; i >= 1; --i)
        {
            if(i + work[i][0]-1 > N)//일하면 마무리를 못하는 경우
            {
                money[i] = money[i+1];
            }
            else if(work[i][0] == 1)//하루만에 끝나는 일
            {
                money[i] = money[i+1] + work[i][1];
            }
            else
            {
                //예를들어 총7일 기간(N=7). 오늘2일차 5일 걸리는일이면 6일차에 마무리하고 7일차 부터 일할 수 있다
                //그것은 2일차 임금 + 7~N 일차까지임금 합계  VS  3~N 일차까지 임금합계 의 대결이다!
                if(money[i + work[i][0]] + work[i][1] > money[i+1])
                {
                    money[i] = money[ i+ work[i][0]] + work[i][1];
                }
                else
                    money[i] = money[i+1];
            }
        }

        System.out.println(money[1]);
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글