Skip to content

Conversation

@j2woo
Copy link
Member

@j2woo j2woo commented Mar 28, 2023

📖 풀이한 문제


💡 문제에서 사용된 알고리즘

  • 다이나믹 프로그래밍

📜 코드 설명

int [][] plan=new int[N+1][2]; // 1일부터 N일까지 확인위해 N+1
for(int i=1; i<N+1; i++){
    st=new StringTokenizer(br.readLine());
    plan[i][0]=Integer.parseInt(st.nextToken());
    plan[i][1]=Integer.parseInt(st.nextToken());
}

plan이라는 이차원 배열에

p[i][0]: i날의 상담에 걸리는 시간, p[i][1]: i날의 상담 후 받을 수 있는 금액을 넣어줬다.

  1. D 점화식

T: 상담 시간, P: 상담 금액
D[i]: i날까지의 최대 수익
N+1일에 퇴사하므로 int D []=D [n+2]로 초기화해줌.
-> 퇴사하는 N+1을 신경 써줘야 한다!( 마지막 날인 N인 날 하루 상담이었을 때를 위해서)

  1. i 날의 상담을 들었을 때 i날에 상담기간 T를 더한 날 값을 확인해 준다
    D [i+T] i+T날의 최대수익과 i날 상담을 들었을 때 받을 수 있는 수익 D [i]+P를 비교해서 큰 값 넣어준다.
// i일의 상담을 들었을 때
// D[i+T]=D[i+T]와 오늘까지의 최대값 D[i]+P 비교해서 큰 값 넣어주기
D[i+T]=Math.max(D[i+T],D[i]+P);
  1. 항상 i 날 D [i]까지의 최대수익을 다음날 D [i+1]에 넣어준다.
    D [i+T] i+T날의 최대수익과 D [i] i날까지의 최대 수익을 비교해서 큰 값을 넣어준다.
// i+1날의 값에 i+1날의 최대 수익과 오늘까지의 최대 수익 비교해서 넣어주기
D[i+1]=Math.max(D[i+1],D[i]);

위의 점화식을 아래 반복문에서 돌려준다.

1일부터 N일까지 반복문을 돌며( i날에 상담을 들었을 때 i + T가 퇴사날짜 전에(<N+1))

for(int i=1; i<N+1; i++){
            int T=plan[i][0]; // i일 상담의 걸리는 시간
            int P=plan[i][1]; // i일 상담의 금액

            if(i+plan[i][0]<=N+1){ // 오늘 상담이 퇴사 전까지 끝나는지 확인
                // i일의 상담을 들었을 때
                // D[i+T]=D[i+T]와 오늘까지의 최대값 D[i]+P 비교해서 큰 값 넣어주기
                D[i+T]=Math.max(D[i+T],D[i]+P);
            }
            // i+1날의 값에 i+1날의 최대 수익과 오늘까지의 최대 수익 비교해서 넣어주기
            D[i+1]=Math.max(D[i+1],D[i]);
        }
  1. D [N+1]에는 최대수익이 들어있으므로 답은 D[N+1]

close #65

@j2woo j2woo requested a review from a team as a code owner March 28, 2023 14:48
@j2woo j2woo requested review from Hyyena and removed request for a team March 28, 2023 14:48
@j2woo j2woo self-assigned this Mar 28, 2023
@j2woo j2woo changed the title J2woo2 박지우: 퇴사 Mar 28, 2023
@j2woo j2woo requested review from a team and removed request for Hyyena March 29, 2023 04:36
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 이 부분이 와닿지 않아서 해결못했었는데, 주석보니 이해가 되네용

@SollyJ SollyJ added this to the 4주차 milestone Mar 29, 2023
@Hyyena Hyyena merged commit 8ceacce into main Mar 29, 2023
@Hyyena Hyyena deleted the j2woo2 branch March 29, 2023 21:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[박지우] 퇴사

4 participants