Skip to content

Commit 62cfa59

Browse files
committed
[Gold V] Title: 퇴사 2, Time: 692 ms, Memory: 316164 KB -BaekjoonHub
1 parent 31a2b1d commit 62cfa59

2 files changed

Lines changed: 28 additions & 26 deletions

File tree

백준/Gold/15486. 퇴사 2/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44

55
### 성능 요약
66

7-
메모리: 304596 KB, 시간: 704 ms
7+
메모리: 316164 KB, 시간: 692 ms
88

99
### 분류
1010

1111
다이나믹 프로그래밍
1212

1313
### 제출 일자
1414

15-
2023년 10월 22일 01:18:10
15+
2025년 8월 3일 19:05:40
1616

1717
### 문제 설명
1818

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,37 @@
1-
import java.io.BufferedReader;
2-
import java.io.InputStreamReader;
3-
import java.util.StringTokenizer;
1+
import java.io.*;
2+
import java.util.*;
43

54
public class Main {
6-
static int N;
7-
static int[] memo;
8-
5+
static int n;
6+
static int[] days, money, dp;
7+
static StringTokenizer st;
8+
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
99
public static void main(String[] args) throws Exception{
10-
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
11-
StringTokenizer st;
12-
N = Integer.parseInt(br.readLine());
13-
memo = new int[N + 2];
10+
inputSetting();
11+
System.out.println(buttounUp());
12+
}
1413

15-
for (int i = 1; i < N + 1; i++) {
16-
st = new StringTokenizer(br.readLine());
17-
dp(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), i);
18-
}
19-
if(memo[N + 1] == 0) memo[N + 1] = memo[N];
20-
memo[N + 1] = Math.max(memo[N + 1], memo[N]);
14+
static int buttounUp() {
15+
dp[n] = 0;
2116

22-
System.out.println(memo[N + 1]);
17+
for(int i = n - 1; 0 <= i; i--){
18+
dp[i] = Math.max(dp[i + 1], dp[i + days[i]] + money[i]);
19+
}
20+
return dp[0];
2321
}
2422

23+
static void inputSetting() throws Exception{
24+
n = Integer.parseInt(br.readLine());
2525

26-
public static void dp(int reduiredDay, int momey, int today){
27-
int day = reduiredDay + today;
28-
29-
//오늘의 상담수익이 0이면, 전날까지의 상담수익의 최댓값이 오늘의 최댓값
30-
memo[today] = Math.max(memo[today], memo[today - 1]);
26+
days = new int[n];
27+
money = new int[n];
28+
dp = new int[n + 50];
29+
for(int i = 0; i < n; i++){
30+
st = new StringTokenizer (br.readLine());
3131

32-
if(day < N + 2)
33-
memo[day] = Math.max(memo[day], momey + memo[today]);
32+
days[i] = Integer.parseInt(st.nextToken());
33+
money[i] = Integer.parseInt(st.nextToken());
34+
}
35+
Arrays.fill(dp, -10000);
3436
}
3537
}

0 commit comments

Comments
 (0)