문제 링크: https://www.acmicpc.net/problem/2156
2156번: 포도주 시식
효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규
www.acmicpc.net
오랜시간 고민을 했지만 결국 풀지 못했고,
또 다른 분의 코드를 참고하였습니다..
참고 링크: https://hanyeop.tistory.com/287
package twentyfivethDay
import java.io.*
import java.util.*
import kotlin.math.max
fun main() = with(Scanner(System.`in`)){
val n = nextInt()
val grape = Array(n+1){0}
val dp = Array(n+1){0} // 최대값 저장
// 헷갈리지 않기 위해 인덱스 1부터 시작
grape[0] = 0
// 포도주 잔 입력
for(i in 1 until grape.size){
grape[i] = nextInt()
}
for(i in dp.indices){ // 6, 10, 13, 9, 8, 1
when (i) {
0 -> dp[i] = grape[0] // 포도주가 0개 ( 계산과정용 )
1 -> dp[i] = grape[1] // 첫번째 포도주 마시기
2 -> dp[i] = grape[1] + grape[2] // 두번째 포도주 마시기
// 세번째 이상 포도주 마시기
else -> {
/**
* 1. 안마시는 경우
* 2. 1번 연속으로 마시는 경우
* 3. 2번 연속으로 마시는 경우
*/
dp[i] = max(max(dp[i-1], (grape[i] + dp[i-2])), (grape[i] + grape[i-1] + dp[i-3]))
}
}
}
println(dp[n])
}
저는 코드를 보고 다시 문제를 풀어보려해도
저렇게 풀이를 떠올리지 못할 것 같아요
저렇게 생각하는 방식을 훈련해야 하나,,,
너무 어렵습니다.
'알고리즘 > 매일마다 풀기(백준)' 카테고리의 다른 글
[2023-04-28] 가장 긴 바이토닉 부분 수열(Kotlin) + 13 문제 (0) | 2023.04.28 |
---|---|
[2023-04-27] 11053 가장 긴 증가하는 부분(Kotlin) (0) | 2023.04.27 |
[2023-04-24] 14215 세 막대(Kotlin) + 2문제 (0) | 2023.04.24 |
[2023-04-23] 10844 쉬운 계단 수 (Kotlin) (0) | 2023.04.23 |
[2023-04-22] 1463 1로 만들기(Kotlin) + 1문제 (1) | 2023.04.23 |
댓글