STUDY πŸ’›/μ•Œκ³ λ¦¬μ¦˜

[BOJ] 14501 퇴사_JAVA

DONI. 2021. 2. 3. 20:53
λ°˜μ‘ν˜•

 

[문제]

www.acmicpc.net/problem/14501

 

14501번: 퇴사

첫째 쀄에 백쀀이가 얻을 수 μžˆλŠ” μ΅œλŒ€ 이읡을 좜λ ₯ν•œλ‹€.

www.acmicpc.net

μƒλ‹΄μ›μœΌλ‘œ μΌν•˜κ³  μžˆλŠ” λ°±μ€€μ΄λŠ” 퇴사λ₯Ό ν•˜λ €κ³  ν•œλ‹€.
μ˜€λŠ˜λΆ€ν„° 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)


[좜λ ₯]
첫째 쀄에 백쀀이가 얻을 수 μžˆλŠ” μ΅œλŒ€ 이읡을 좜λ ₯ν•œλ‹€.

 


 

[Solution 1]
- 완전탐색
- μ• μ΄ˆμ— μž…λ ₯쑰건이 ν¬μ§€μ•Šκ³  Tκ°’μœΌλ‘œ μ ν”„μ ν”„ν•˜κΈ° λ•Œλ¬Έμ— μ™„μ „νƒμƒ‰μœΌλ‘œλ„ ν•΄κ²° κ°€λŠ₯ν•œ 문제

package boj14501_퇴사;

/* 완전탐색
 * (DPλ¬Έμ œμ§€λ§Œ 톡과됨..!)
 * */

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

public class Main {
	static int n, max=0;
	static int[][] arr;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		n = Integer.parseInt(st.nextToken());
		arr = new int[n][2];
		
		for(int i=0; i<n; i++) {
			st = new StringTokenizer(br.readLine());
			
			arr[i][0] = Integer.parseInt(st.nextToken());
			arr[i][1] = Integer.parseInt(st.nextToken());
		}
		
		sol(0, 0);
		System.out.println(max);
	}
	
	static void sol(int idx, int money) {
		if(idx >= n)  {
			max = Math.max(max, money);
			return ;
		}
		
		//nμ΄ν›„μ—λŠ” νšŒμ‚¬μ— μ—†κΈ°λ•Œλ¬Έμ— idx+κ±Έλ¦¬λŠ” μΌμˆ˜κ°€ n을 λ„˜μœΌλ©΄ μ•ˆλ¨
		if(idx+arr[idx][0] <= n) {
			sol(idx+arr[idx][0], money+arr[idx][1]);
		}
		
		sol(idx+1, money);
	}
}

 



[Solution 2]
- λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°

package boj14501_퇴사;

/* λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°μœΌλ‘œ ν’€κΈ°
 * */

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

public class Main2 {
	static int n, max=0;
	static int[][] arr;
	static int[] d;
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		n = Integer.parseInt(st.nextToken());
		arr = new int[n][2];
		d = new int[n+1];
		
		for(int i=0; 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-1; i>=0; --i) {
			//μΈλ±μŠ€μ—μ„œ κ±Έλ¦¬λŠ”μ‹œκ°„μ΄ n보닀 μž‘μ•„μ•Όλ§Œ +
			if(i+arr[i][0] <= n) {
				d[i] = Math.max(arr[i][1]+d[i+arr[i][0]], max);
				max = d[i];
			} else {
				d[i] = max;
			}
		}
		
		System.out.println(d[0]);
	}
}
λ°˜μ‘ν˜•