본문으로 바로가기

[beakjoon]퇴사 JAVA

category 코딩테스트/baekjoon 2022. 11. 8. 22:10

 

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

 

14501번: 퇴사

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

www.acmicpc.net

 

* 이 문제를 풀기 위해선 점화식을 알고 가야한다.

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

 

13699번: 점화식

다음의 점화식에 의해 정의된 수열 t(n)을 생각하자: t(0)=1 t(n)=t(0)*t(n-1)+t(1)*t(n-2)+...+t(n-1)*t(0) 이 정의에 따르면, t(1)=t(0)*t(0)=1 t(2)=t(0)*t(1)+t(1)*t(0)=2 t(3)=t(0)*t(2)+t(1)*t(1)+t(2)*t(0)=5 ... 주어진 입력 0 ≤ n

www.acmicpc.net

		//dp[i] += dp(dp[j] * dp[i-1-j]);
		//j = 0 ~ (i-1)
		long dp[] = new long[36];
		dp[0] = 1;
		dp[1] = 1;
		
 		for(int i = 2; i < 36; i++) {
			for(int j = 0; j < i; j ++) {
				dp[i] += (dp[j] * dp[i-1-j]);
			}
		}
 		
 		int count = 0;
 		for(long d : dp) {
 			System.out.println(count + " : " + d);
 			count++;
 		}

 

<주의> 

상담 날짜의 끝나는 날 기준으로 계산, 뒤에서 부터 시작해야 한다.

이런 계산식의 문젠는 손으로 써보면 이해가 확실히 잘된다!!

 

 

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

 
public class Main {
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		
		 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		 StringTokenizer st = new StringTokenizer(br.readLine());
		 
		 int N = Integer.parseInt(st.nextToken());
		 
		 int[] time = new int[N+1];
		 int[] pay  = new int[N+1];
		 int[] dp = new int[N+2];
		 
		 for(int i = 1; i <= N; i++) {
			 st = new StringTokenizer(br.readLine());
			 time[i] = Integer.parseInt(st.nextToken());
			 pay[i] = Integer.parseInt(st.nextToken());
		 }
		 
		 int day = N+1;
		 
		 for(int i = N; i > 0; i--) {
			 
			 int next = time[i] + i; // 일 끝나는 시간
			 
			 if(next > day) dp[i] = dp[i+1];
			 else {
				 dp[i] = Math.max(dp[i+1], pay[i]+dp[next]);
			 }
		 }
		 
		 System.out.println(dp[1]);
	}
}

'코딩테스트 > baekjoon' 카테고리의 다른 글

[baekjoon]회의실 배정 JAVA  (0) 2022.11.24
[beakjoon] 드래곤 커브 JAVA  (0) 2022.11.10
[baekjoon] 로봇 청소기 JAVA  (0) 2022.11.09
[baekjoon] 주사위 굴리기 JAVA  (0) 2022.11.08