반응형

문제

 

 

 

소스코드

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;
	}
}

 

 

반응형
반응형