반응형
문제
소스코드
import java.util.Scanner;
public class Main {
int answer[];
boolean consequence;
static int stair[] = new int[300];
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Main m = new Main();
m.answer = new int[300];
m.consequence = false;
int stair_count = scan.nextInt();
for (int i = 0; i < stair_count; i++) {
stair[i] = scan.nextInt();
m.step(i);
}
System.out.println(m.answer[stair_count - 1]);
}
public void step(int n) {
switch (n) {
case 0:
answer[0] = stair[0];
return;
case 1:
answer[1] = stair[0] + stair[1];
return;
case 2:
answer[2] = (stair[0] > stair[1]) ? stair[0] + stair[2] : stair[1] + stair[2];
consequence = (stair[0] > stair[1]) ? false : true;
return;
default:
break;
}
int pre1 = answer[n - 1] + stair[n];
int pre2 = answer[n - 2] + stair[n];
int pre3 = answer[n - 3] + stair[n - 1] + stair[n];
if (consequence) {
answer[n] = (pre2 > pre3) ? pre2 : pre3;
consequence = (pre2 > pre3) ? false : true;
return;
}
if (pre1 > pre2) {
answer[n] = (pre1 > pre3) ? pre1 : pre3;
consequence = true;
} else {
answer[n] = (pre2 > pre3) ? pre2 : pre3;
consequence = (pre2 > pre3) ? false : true;
}
return;
}
}
반응형
'Algorithm' 카테고리의 다른 글
[백준 6064번] 카잉 달력 - Python (0) | 2019.05.10 |
---|---|
[백준 2839번] 설탕 배달 - Python (0) | 2019.05.09 |
[C언어] 최대 연속부분수열의 합 (0) | 2019.02.24 |
[동적 프로그래밍 예제] 부분집합의 합(C언어) (1) | 2019.01.17 |
[재귀 알고리즘] 그레이 코드(Gray Code) (0) | 2019.01.15 |