320x100
문제 : https://codingcompetitions.withgoogle.com/codejam/round/000000000043580a/00000000006d1145
X = CJ 비용, Y = JC 비용. S = C, J, ? 로 이루어진 문자열
S 문자열의 ? 문자에 C 혹은 J를 대체한다고 할 때, 지불해야 하는 최소 비용을 구해라.
DP로 풀 수 있다.
dp[0][i] = S[i]가 'C' 일 때, S[~i] 까지 최소 지불금액
dp[1][i] = S[i]가 'J' 일 때, S[~i] 까지 최소 지불금액
dp 배열은 초기 값은 만들 수 없음을 의미하는 INF 값으로 세팅한다.
그리고 S[0]이 'C' 혹은 '?'인 경우 dp[0][0] 을 0으로 갱신한다.
또한 S[0]이 'J' 혹은 '?'인 경우 dp[1][0]을 0으로 갱신한다.
그리고 1 ~ N-1 까지 탐색하며 (탐색변수 = i)
S[i]가 'C' 혹은 '?' 인 경우
dp[0][i] = 최소값(dp[0][i-1](CC), dp[1][i-1](JC) + Y) 로 갱신한다.
S[i]가 'J' 혹은 '?' 인 경우
dp[1][i] = 최소값(dp[1][i-1](JJ), dp[0][i-1](CJ) + X) 로 갱신한다.
dp[0][N-1], dp[1][N-1] 중 최소값이 정답이 된다.
시간, 공간 복잡도는 O(N).
320x100
'알고리즘 문제 > CodeJam' 카테고리의 다른 글
[Codejam][2021][Round 1A] 1. Append Sort (0) | 2022.03.01 |
---|---|
[Codejam][2021][QR] 1. Reversort (0) | 2022.01.08 |
[Kickstart][2021][Round A] 1. K-Goodness String (0) | 2021.03.28 |
[Kickstart][2020][Round F] 2. Metal Harvest (0) | 2020.12.24 |
[Kickstart][2020][Round F] 1. ATM Queue (0) | 2020.12.22 |
댓글