9465번: 스티커
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의
www.acmicpc.net
문제 설명 : 스티커 점수의 최댓값 구하기
문제 풀이 :
처음에는 대각선끼리만 구한 뒤 마지막의 이전 열부터는 최댓값을 구해서 더하면 되는 줄 알았는데 완전히 틀렸습니다.
변을 공유하기 때문에 이전 대각선과 현재값을 더한 것과 이전의 전 대각선의 값과 현재값을 더한 것을 비교하여 최댓값을 구하는 방식입니다.
이전의 전 대각선을 구하는 이유는 이전 대각선을 선택하지 않을 때도 있기 때문입니다.
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int tc = 0; tc < T; tc++) {
int n = sc.nextInt();
int[][] dp = new int[2][n+1];
for (int i = 0; i < 2; i++) {
for (int j = 1; j < n+1; j++) {
dp[i][j] = sc.nextInt();
}
}//end of input
int answer = 0;
// 열이 2일 때 부터 이전의 전 대각선의 값을 구할 수 있음
for (int i = 2; i < n+1; i++) {
//이전 대각선, 전전 대각선 비교
dp[0][i] += Math.max(dp[1][i-2], dp[1][i-1]);
dp[1][i] += Math.max(dp[0][i-2], dp[0][i-1]);
}
System.out.println(Math.max(dp[0][n], dp[1][n]));
}//end of tc
}
}
'ALGORITHM > 프로그래머스 | 백준 | 삼성 | 카카오' 카테고리의 다른 글
[백준] 평범한 배낭 java (0) | 2021.03.25 |
---|---|
[프로그래머스] 등굣길 (0) | 2021.03.25 |
[프로그래머스] 네트워크 (0) | 2021.03.24 |
[백준] 11660번 구간 합 구하기 5 (0) | 2021.03.23 |
[백준] 17609번 회문 (0) | 2021.03.21 |