곽로그
[백준 14501, Java] 퇴사 본문
반응형
문제
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String line = br.readLine().trim();
StringTokenizer st = new StringTokenizer(line);
int N = Integer.parseInt(st.nextToken());
int[] tempT = new int[N];
int[] tempP= new int[N];
for(int i = 0;i<N;i++){
line = br.readLine();
st = new StringTokenizer(line," ");
tempT[i] = Integer.parseInt(st.nextToken());
tempP[i] = Integer.parseInt(st.nextToken());
}
GetOut2 getOut2 = new GetOut2(N,tempT,tempP);
getOut2.countMaxProfit2(0,0);
bw.write(String.valueOf(getOut2.getMax()));
bw.flush();
}
}
class GetOut2{
int N;
int max;
int[] T;
int[] P;
public GetOut2(int N, int[]tempT, int[] tempP){
this.N = N;
max = 0;
T = tempT;
P = tempP;
}
public void countMaxProfit(int startDay, int sum){
//System.out.println("day:"+startDay+",sum:"+sum);
if(startDay==N){
max = Math.max(max,sum);
}
else{
for(int day = startDay; day<N ; day++){
int nextDay = day+T[day];
if(nextDay>N){
max = Math.max(max,sum);
}
else{
countMaxProfit(nextDay,sum+P[day]);
}
}
}
}
public void countMaxProfit2(int day, int sum){
if(day ==N){
max = Math.max(max,sum);
}
else if(day>N){
return;
}
else{
countMaxProfit(day+T[day],sum+P[day]);
countMaxProfit(day+1,sum);
}
}
public int getMax(){
return max;
}
}
review
1. 선택한다/ 선택하지 않는다의 확장판
2. 1번은 for문으로 선택여부를 체크. 이 부분은 "선택한다"만 있어서 다음 상담날짜가 배열을 넘어가는지의 여부를 한번 더 체크해야한다.
2번은 선택하지 않은 경우를 다음날로 넘어가게 했다.
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 14890, Java] 경사로 (0) | 2020.09.17 |
---|---|
[백준 14888, Java] 연산자 끼워넣기 (0) | 2020.09.11 |
[백준 9095, Java] 1,2,3 더하기 (0) | 2020.09.07 |
[백준 18290, 자바] NM과 K (1) (0) | 2020.08.12 |
[백준 9663, 자바] N-Queen (0) | 2020.07.28 |
Comments