코테/백준
[백준/JAVA] 9465번: 스티커
imname1am
2024. 1. 20. 01:26
반응형
📖 문제
9465번: 스티커
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의
www.acmicpc.net
💡 풀이 방식
• DP
- dp 배열을 만든다. (dp[i][j] : 해당 칸 (i, j)까지 스티커를 떼었을 때 얻을 수 있는 최대 점수)
2. 0번 열은 본인이 최대이므로 본인으로 초기화한다.
3. 1번 열은 특수처리한다.
- [0][1]은 왼쪽 아래 값과 본인 칸 값 더하기
- [1][1]은 왼쪽 위쪽 값과 본인 칸 값 더하기
dp[0][1] = dp[1][0] + arr[0][1];
dp[1][1] = dp[0][0] + arr[1][1];
4. 2번 열부터 뒤쪽까지는 아래와 같은 방식으로 채운다..
dp[0][i] = Math.max(dp[1][i - 1], dp[1][i - 2]) + arr[0][i];
dp[1][i] = Math.max(dp[0][i - 1], dp[0][i - 2]) + arr[1][i];
5. 마지막 열의 두 값 중 큰 값을 구해 출력한다.
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
while(T --> 0) {
int n = Integer.parseInt(br.readLine());
int[][] arr = new int[2][n];
int[][] dp = new int[2][n];
for(int i = 0 ; i < 2 ; i++) {
st = new StringTokenizer(br.readLine());
for(int j = 0 ; j < n ; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
// 0번 열은 본인이 최대이므로 본인으로 초기화
dp[0][0] = arr[0][0];
dp[1][0] = arr[1][0];
for(int i = 1 ; i < n ; i++) {
if(i == 1) { // 1번 열은 특수처리
dp[0][i] = dp[1][0] + arr[0][1];
dp[1][i] = dp[0][0] + arr[1][1];
continue;
}
dp[0][i] = Math.max(dp[1][i - 1], dp[1][i - 2]) + arr[0][i];
dp[1][i] = Math.max(dp[0][i - 1], dp[0][i - 2]) + arr[1][i];
}
sb.append(Math.max(dp[0][n - 1], dp[1][n - 1])).append("\n");
}
System.out.println(sb);
}
}
|
cs |
🧐 새로 알게 된 내용
저 dp 규칙을 찾고 점화식을 세우는 방법을 새로 깨닫다...
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
[알고리즘] 백준 9465 스티커 -dp- 자바
www.acmicpc.net/problem/9465 9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정
youngest-programming.tistory.com
[BOJ] 백준 9465번 스티커 (Java)
#9465 스티커 난이도 : 실버 2 유형 : DP 9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가
loosie.tistory.com
반응형