티스토리 뷰

알고리즘 문제 풀이

버튼 누르기

딩신 2018. 10. 27. 15:43

버튼 누르기

 

문제


철수에게는 빨간색, 초록색, 파란색 세 개의 버튼이 있다. 버튼 하나를 누를 때 마다 특정 점수를 얻을 수 있으며, 철수는 1초에 한 번씩 버튼을 누를 수 있다. 물론, 특정 시간에는 세 개의 버튼 중에서 한 개의 버튼만을 누를 수 있다. 각 시간마다 특정 버튼을 눌렀을 때 얻는 점수는 모두 다를 수 있다. 예를 들어, 시간 1에 빨간색, 초록색, 파란색 버튼에 대한 점수가 3, 5, 7 로 주어질 수 있다. 이 경우에는 파란색을 누르는 것이 점수를 가장 많이 얻을 수 있다. 물론, 시간 2에 각 버튼에 대한 점수는 또 다를 수 있다. 버튼을 누를 때에는 한 가지 규칙이 있는데, 연속하여 색깔이 같은 버튼을 두 번 누를 수 없다는 것이다. 예를 들어, 시간 1에 초록색 버튼을 눌렀다면, 시간 2에는 초록색 버튼을 누를 수 없다. 이와 같은 규칙으로 각 시간마다 버튼을 누른다고 할 때, 철수가 얻을 수 있는 점수의 최댓값을 출력하는 프로그램을 작성하시오.

 

입력


첫 번째 줄에 철수에게 주어진 시간 N이 주어진다. ( 1 ≤ N ≤ 100,000 ) 두 번째 줄부터 N개의 시간에 대하여 빨간색, 초록색, 파란색 버튼을 눌렀을 때 얻을 수 있는 점수가 주어진다.

 

출력


철수가 얻을 수 있는 점수의 최댓값을 출력한다.

 

예제 입력

3
27 8 28
18 36 40
7 20 8

예제 출력

87


코드

//버튼누르기

import java.util.*;

public class Main {

public static ArrayList<Integer> box = new ArrayList<>();

//첫째 줄에 괄호 문자열이 한 줄에 주어진다. 하나의 괄호 문자열의 길이는 2 이상 50 이하이다.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//총 몇개의 숫자를 입력 받을 것인지
int a;
int[][] b;
int c;
int d = 0;
int e = 0;
Stack<String> stack = new Stack<>();

a = sc.nextInt();


b = new int[a + 1][3];

for (int i = 1; i <= a; i++) {
c = sc.nextInt();
d = sc.nextInt();
e = sc.nextInt();

b[i][0] = c;
b[i][1] = d;
b[i][2] = e;
}

for (int i = 1; i <= a; i++) {
for (int j = 0; j < 3; j++) {
b[i][j] += Math.max(b[i - 1][(j + 1) % 3], b[i - 1][(j + 2) % 3]);
}
}

sc.close();

System.out.println(Math.max(b[a][0], Math.max(b[a][1], b[a][2])));


}


}


'알고리즘 문제 풀이 ' 카테고리의 다른 글

백준 10844번 / 쉬운 계단 수  (0) 2018.11.05
백준 1463번 / 1로 만들기  (0) 2018.11.05
백준 / 정수 삼각형  (0) 2018.11.01
백준 / RGB거리  (0) 2018.11.01
특정 최단거리  (0) 2018.10.24
파티  (0) 2018.10.24
최단거리  (0) 2018.10.22
팀 나누기  (0) 2018.10.22
댓글