πŸ₯ˆ [Baekjoon / Java] 14501. 퇴사

μ΄ν•˜μ–€Β·2024λ…„ 6μ›” 17일
0

🐣 λ°±μ€€

λͺ©λ‘ 보기
25/33

문제 μ„€λͺ…


πŸ’‘ Info

λ‚΄μš©

μƒλ‹΄μ›μœΌλ‘œ μΌν•˜κ³  μžˆλŠ” λ°±μ€€μ΄λŠ” 퇴사λ₯Ό ν•˜λ €κ³  ν•œλ‹€.
μ˜€λŠ˜λΆ€ν„° N+1일째 λ˜λŠ” λ‚  퇴사λ₯Ό ν•˜κΈ° μœ„ν•΄μ„œ, 남은 N일 λ™μ•ˆ μ΅œλŒ€ν•œ λ§Žμ€ 상담을 ν•˜λ €κ³  ν•œλ‹€.
λ°±μ€€μ΄λŠ” λΉ„μ„œμ—κ²Œ μ΅œλŒ€ν•œ λ§Žμ€ 상담을 작으라고 뢀탁을 ν–ˆκ³ , λΉ„μ„œλŠ” ν•˜λ£¨μ— ν•˜λ‚˜μ”© μ„œλ‘œ λ‹€λ₯Έ μ‚¬λžŒμ˜ 상담을 μž‘μ•„λ†“μ•˜λ‹€.
각각의 상담은 상담을 μ™„λ£Œν•˜λŠ”λ° κ±Έλ¦¬λŠ” κΈ°κ°„ Ti와 상담을 ν–ˆμ„ λ•Œ 받을 수 μžˆλŠ” κΈˆμ•‘ Pi둜 이루어져 μžˆλ‹€.
N = 7인 κ²½μš°μ— λ‹€μŒκ³Ό 같은 상담 μΌμ •ν‘œλ₯Ό 보자.

1일에 μž‘ν˜€μžˆλŠ” 상담은 총 3일이 걸리며, μƒλ‹΄ν–ˆμ„ λ•Œ 받을 수 μžˆλŠ” κΈˆμ•‘μ€ 10이닀. 5일에 μž‘ν˜€μžˆλŠ” 상담은 총 2일이 걸리며, 받을 수 μžˆλŠ” κΈˆμ•‘μ€ 15이닀.
상담을 ν•˜λŠ”λ° ν•„μš”ν•œ 기간은 1일보닀 클 수 있기 λ•Œλ¬Έμ—, λͺ¨λ“  상담을 ν•  μˆ˜λŠ” μ—†λ‹€. 예λ₯Ό λ“€μ–΄μ„œ 1일에 상담을 ν•˜κ²Œ 되면, 2일, 3일에 μžˆλŠ” 상담은 ν•  수 μ—†κ²Œ λœλ‹€. 2일에 μžˆλŠ” 상담을 ν•˜κ²Œ 되면, 3, 4, 5, 6일에 μž‘ν˜€μžˆλŠ” 상담은 ν•  수 μ—†λ‹€.
λ˜ν•œ, N+1μΌμ§Έμ—λŠ” νšŒμ‚¬μ— μ—†κΈ° λ•Œλ¬Έμ—, 6, 7일에 μžˆλŠ” 상담을 ν•  수 μ—†λ‹€.
퇴사 전에 ν•  수 μžˆλŠ” μƒλ‹΄μ˜ μ΅œλŒ€ 이읡은 1일, 4일, 5일에 μžˆλŠ” 상담을 ν•˜λŠ” 것이며, μ΄λ•Œμ˜ 이읡은 10+20+15=45이닀.
상담을 적절히 ν–ˆμ„ λ•Œ, 백쀀이가 얻을 수 μžˆλŠ” μ΅œλŒ€ μˆ˜μ΅μ„ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

πŸ“₯μž…λ ₯ 쑰건

  • 첫째 쀄에 N (1 ≀ N ≀ 15)이 주어진닀.
  • λ‘˜μ§Έ 쀄뢀터 N개의 쀄에 Ti와 Piκ°€ 곡백으둜 κ΅¬λΆ„λ˜μ–΄μ„œ 주어지며, 1일뢀터 NμΌκΉŒμ§€ μˆœμ„œλŒ€λ‘œ 주어진닀. (1 ≀ Ti ≀ 5, 1 ≀ Pi ≀ 1,000)
//예1
7
3 10
5 20
1 10
1 20
2 15
4 40
2 200
//예2
10
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
//예3
10
5 10
5 9
5 8
5 7
5 6
5 10
5 9
5 8
5 7
5 6
//예4
10
5 50
4 40
3 30
2 20
1 10
1 10
2 20
3 30
4 40
5 50

πŸ“€μΆœλ ₯ 쑰건

  • 첫째 쀄에 백쀀이가 얻을 수 μžˆλŠ” μ΅œλŒ€ 이읡을 좜λ ₯ν•œλ‹€.
//예1
45
//예2
55
//예3
20
//예4
90


문제 이해


  • 상담을 적절히 ν–ˆμ„ λ•Œ, 백쀀이가 얻을 수 μžˆλŠ” μ΅œλŒ€ μˆ˜μ΅μ„ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨


μ•Œκ³ λ¦¬μ¦˜


μ‹€μ œ 풀이 μ‹œκ°„ : 17λΆ„

  • μž…λ ₯

    • N μž…λ ₯λ°›κΈ°
    • T, P λ°°μ—΄ μž…λ ₯λ°›κΈ°
  • 계산

    • d둜 ν…Œμ΄λΈ” μ΄ˆκΈ°ν™”ν•˜κΈ°
    • λ°”ν…€μ—…μœΌλ‘œ κ΅¬ν˜„
      • Math.max둜 μ΅œλŒ€ 이읡 κ΅¬ν˜„
      • 상담 κΈ°κ°„ λ²—μ–΄λ‚˜λŠ” μ˜ˆμ™Έ 쑰건 적용
  • 좜λ ₯

    • maxCon 좜λ ₯
import java.util.*;

public class Main {

    static int N;
    static int[] T;
    static int[] P;
    static int[] d;
    
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);

        N = sc.nextInt();

        for(int i=0; i<N; i++){
            T[i] = sc.nextInt();
            P[i] = sc.nextInt();
        }
        d = new int[16];

        int maxCon = 0; //μ΅œλŒ€ 수읡

        for(int i = N; i>0; i--){
            int time = T[i]; //상담 μΌμ •ν‘œ 쀑 μ‹œκ°„μ— ν•΄λ‹Ή

            if(time<=N){ //상담이 λ˜λŠ” 경우
                d[i] = Math.max(P[i] + d[time], maxCon);
            } else {
                d[i] = maxCon;
            }
        }
        System.out.println(maxCon);
    }
}


μ˜€λ‹΅μ²΄ν¬


  • Exception in thread "main" java.lang.NullPointerException
  • new int[N]으둜 λ²”μœ„ 지정해 ν•΄κ²°
//before
N = sc.nextInt();

for(int i=0; i<N; i++){
    T[i] = sc.nextInt();
    P[i] = sc.nextInt();
}


//after
N = sc.nextInt();
T = new int[N];
P = new int[N];
for(int i=0; i<N; i++){
    T[i] = sc.nextInt();
    P[i] = sc.nextInt();
}
  • 좜λ ₯ 문제
    • λ°°μ—΄μ˜ λ²”μœ„λ₯Ό +1ν•΄μ„œ ν•΄κ²°
//before
    d = new int[16];

    int maxCon = 0;

    for(int i = N; i>0; i--){
        int time = T[i];

        if(time<=N){
            d[i] = Math.max(P[i] + d[time], maxCon);
        } else {
            d[i] = maxCon;
        }
    }



//after
static int maxCon;
d = new int[N + 1]; //d 크기λ₯Ό N+1둜 λ³€κ²½

for(int i = N-1; i>=0; i--){

int time = T[i] + i; // -> μ΄λ ‡κ²Œ time λ³€μˆ˜λ‘œ T[i] + iλ₯Ό μ„ μ–Έν•΄μ€˜μ•Ό 함!(μ•ˆκ·ΈλŸ¬λ©΄ μ›ν•˜λŠ” κ°’ μ•ˆλ‚˜μ˜΄)

if(time<=N){
	d[i] = Math.max((P[i] + d[time]), maxCon);
    maxCon = d[i];
    } else {
    	d[i] = maxCon;  
    }
}

μ΅œμ’… 풀이


μ‹€μ œ 풀이 μ‹œκ°„ : 35λΆ„(μ‹€μ œ 풀이 μ‹œκ°„ 포함)

  • μž…λ ₯(μ „μ—­λ³€μˆ˜λ‘œ μ„ μ–Έ)

    • N μž…λ ₯λ°›κΈ°
    • T, P λ°°μ—΄ μž…λ ₯λ°›κΈ°
  • 계산

    • d둜 ν…Œμ΄λΈ” μ΄ˆκΈ°ν™”ν•˜κΈ°
    • λ°”ν…€μ—…μœΌλ‘œ κ΅¬ν˜„
      • Math.max둜 μ΅œλŒ€ 이읡 κ΅¬ν˜„
      • 상담 κΈ°κ°„ λ²—μ–΄λ‚˜λŠ” μ˜ˆμ™Έ 쑰건 적용
  • 좜λ ₯

    • maxCon 좜λ ₯
import java.util.*;

public class Main {

    static int N;
    static int[] T;
    static int[] P;
    static int[] d;
    static int maxCon;
    
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);

        N = sc.nextInt();
        T = new int[N];
        P = new int[N];
        for(int i=0; i<N; i++){
            T[i] = sc.nextInt();
            P[i] = sc.nextInt();
        }
        d = new int[N + 1];

        for(int i = N-1; i>=0; i--){

            int time = T[i] + i;

            if(time<=N){
                d[i] = Math.max((P[i] + d[time]), maxCon);
                maxCon = d[i];
            } else {
                d[i] = maxCon;
            }
        }
        System.out.println(maxCon);
    }
}

profile
μ–Έμ  κ°€ λ‚΄ μ½”λ“œλ‘œ 세상에 κΈ°μ—¬ν•  수 μžˆλ„λ‘, BE&Data Science 개발 기둝 λ…ΈνŠΈβ˜˜οΈ

0개의 λŒ“κΈ€