코테/백준

[백준/JAVA] 14501번: 퇴사

imname1am 2023. 5. 15. 15:20
반응형

🔺 문제

 

14501번: 퇴사

첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.

www.acmicpc.net

 

 

🔺 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.*;
import java.io.*;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        
        int N = Integer.parseInt(br.readLine());
        int[] D = new int[N + 2];   // 오늘~퇴사일까지 벌 수 있는 최대 수입
        int[] T = new int[N + 1];   // 상담에 필요한 일 수
        int[] P = new int[N + 1];   // 상담 완료 시 받는 수입 저장 배열
        
        for(int i = 1 ; i <= N ; i++) {
            st = new StringTokenizer(br.readLine()," ");
            T[i] = Integer.parseInt(st.nextToken());
            P[i] = Integer.parseInt(st.nextToken());
        }
        
        for(int i = N ; i > 0 ; i--) {
            // i번째 상담을 퇴사일까지 끝낼 수 있을 때
            if((i + T[i] - 1<= N) {
                D[i] = Math.max(D[i + 1], D[i + T[i]]) + P[i]);
            }
            // i번째 상담을 퇴사일까지 끝낼 수 없을 때, 수입은 그대로
            else {
                D[i] = D[i + 1];
            }
        }
        System.out.println(D[1]);
    }
}
cs
✅ 해결 아이디어
✔ DP - 점화식
→ dp[N] :
N일에 얻을 수 있는 최대 수익

 


🔺 다른 풀이들

- 점화식이 약간 다르다. (DP 배열을 앞에서부터 채움)

 

[알고리즘/백준] 14051 퇴사 - 자바(Java), DP, 삼성 SW 역량테스트 기출

문제 https://www.acmicpc.net/problem/14501 풀이 코드 DP를 사용하여 풀이 dy[i] : i번째 날의 최대 수입 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public

developer-hm.tistory.com

 

[백준 14501] 퇴사 (자바)

백준 14501번 퇴사 (자바) 출처 www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 문제 상담원으로 일하고 있는 백준이는 퇴사를 하려고 한

hidelookit.tistory.com

 

 

- 2차원 배열 점화식 & 재귀를 사용하셨다.

 

백준 14051 - 퇴사 · Yesdoing의 개발 블로그

사진을 클릭하시면 문제로 이동하실 수 있습니다. 문제 상담원으로 일하고 있는 백준이는 퇴사를 하려고 한다. 오늘부터 N+1일째 되는날 퇴사를 하기 위해서, 남은 N일 동안 최대한 많은 상담을

yesdoing.github.io


💬 느낀 점

재귀를 잘하고 싶구나...

 

 

1회독 2회독 3회독 4회독 5회독
V 7/5      

 

 

(+7/3 2회독)

나름 점화식 비슷하게 쓴 거 같은데... 은근(?) 틀림

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.*;
import java.io.*;
 
public class Main {
    public static void main(String[] args) throws IOException { 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        
        int N = Integer.parseInt(br.readLine());
        
        int[] D = new int[N + 2];
        int[][] arr = new int[N + 1][2];
        
        for(int i = 1 ; i <= N ; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            arr[i][0= Integer.parseInt(st.nextToken());
            arr[i][1= Integer.parseInt(st.nextToken());
        }
        
        for(int i = N ; i > 0 ; i--) {    // 뒤에서부터 거꾸로~
            if(i + arr[i][0- 1 <= N) {
                D[i] = Math.max(D[i+1], arr[i][1+ D[i + arr[i][0]]);
            }
            else {
                D[i] = D[i + 1];
            }
        }
        System.out.println(D[1]);
    }
}
 
cs


(참고)

✔ Do it 알고리즘 코딩테스트 자바편

 

반응형