Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 2021.01.17
- SWEA
- 2021.01.22
- 코드스쿼드 마스터즈
- 2021.01.19
- 백준 9093
- Til
- 백준 1149
- 2021.01.12
- 자바
- baekjoon1541
- spring-boot
- 2021.01.06
- 2021.01.11
- 잃어버린 괄호
- 2021.01.13
- 박재성
- 마스터즈 2주차 회고
- 알고리즘데이
- 코드스쿼드
- java
- 2021.01.21
- 쉽게 배우는 운영체제
- 2020.01.08
- 2021.01.14
- 괄호
- algorithm
- 2021.01.18
- 백준
- 알고리즘
Archives
- Today
- Total
Cooper's devlog
스티커:9465번 - JAVA 본문
1. 문제 링크
https://www.acmicpc.net/problem/9465
2. 문제 설명
3. 문제 접근
-dp문제는 주로 규칙성을 찾고 점화식을 작성하는 것이 핵심이다!!
(하지만, 최댓값, 최솟값을 구하는 문제을 규칙성으로 접근하는 것이 쉬운 것만은 아닌 것 같다.)
1. 첫번 째 문제 접근 법
(1) 이전의 값이 일치 함에 따라서 if문을 작성하여 일치하는 경우 분류해서 접근하는 방식으로 접근하려고 했다.
2. 문제 접근 해결법
- 생각보다 간단한 원리에 의해 점화식이 작성되는 것을 확인할 수 있었다.
(1) 이전의 최댓 값이 다음 데이터의 합이 되는지 확인하는 문제.
dp[1][k] = Math.max(dp[2][k-1], dp[2][k-2]) + data[1][k];
dp[2][k] = Math.max(dp[1][k-1], dp[1][k-2]) + data[2][k];
(쉽다고 얘기할 수도 있겠지만, 당장 점화식을 작성하는 과정에서 생각보다 시간이 오래걸렸던 점화식)
4. 문제 풀이
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
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Sticker {
static int[][] data;
static int[][] dp;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int t = 1; t <= T; t++) {
int n = Integer.parseInt(br.readLine());
data = new int[3][n+1];
dp = new int[3][n+1];
for (int row = 1; row <= 2; row++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int col = 1; col <= n; col++) {
data[row][col] = Integer.parseInt(st.nextToken());
}
}
dp[1][1] = data[1][1];
dp[2][1] = data[2][1];
for (int k = 2; k <= n; k++) {
dp[1][k] = Math.max(dp[2][k-1], dp[2][k-2]) + data[1][k];
dp[2][k] = Math.max(dp[1][k-1], dp[1][k-2]) + data[2][k];
}
System.out.println(Math.max(dp[1][n], dp[2][n]));
}
}
}
|
5. 느낀 점 혹은 접근법
(1) 간단한 점화식을 작성하는 과정에성 최대, 최소를 구하는 점화식은 단계적으로 접근해서 문제를 작성하는 것이 더 효율적이라고 판단한다.
'Algorithm > Baekjoon' 카테고리의 다른 글
정수 삼각형: 1932번 - JAVA (0) | 2020.07.16 |
---|---|
포도주 시식:2156번-JAVA (0) | 2020.07.16 |
RGB거리 : 1149번 - JAVA (0) | 2020.07.16 |
오르막수:11057번 - JAVA (0) | 2020.07.15 |
RGB거리 : 1149번 - JAVA (0) | 2020.07.15 |
Comments