https://www.acmicpc.net/problem/17404
17404๋ฒ: RGB๊ฑฐ๋ฆฌ 2
์ฒซ์งธ ์ค์ ์ง์ ์ N(2 ≤ N ≤ 1,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๊ฐ ์ง์ ๋นจ๊ฐ, ์ด๋ก, ํ๋์ผ๋ก ์น ํ๋ ๋น์ฉ์ด 1๋ฒ ์ง๋ถํฐ ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค. ์ง์ ์น ํ๋ ๋น์ฉ์ 1,000๋ณด๋ค ์๊ฑฐ๋
www.acmicpc.net
๋ฌธ์
RGB๊ฑฐ๋ฆฌ์๋ ์ง์ด N๊ฐ ์๋ค. ๊ฑฐ๋ฆฌ๋ ์ ๋ถ์ผ๋ก ๋ํ๋ผ ์ ์๊ณ , 1๋ฒ ์ง๋ถํฐ N๋ฒ ์ง์ด ์์๋๋ก ์๋ค.
์ง์ ๋นจ๊ฐ, ์ด๋ก, ํ๋ ์ค ํ๋์ ์์ผ๋ก ์น ํด์ผ ํ๋ค. ๊ฐ๊ฐ์ ์ง์ ๋นจ๊ฐ, ์ด๋ก, ํ๋์ผ๋ก ์น ํ๋ ๋น์ฉ์ด ์ฃผ์ด์ก์ ๋, ์๋ ๊ท์น์ ๋ง์กฑํ๋ฉด์ ๋ชจ๋ ์ง์ ์น ํ๋ ๋น์ฉ์ ์ต์๊ฐ์ ๊ตฌํด๋ณด์.
- 1๋ฒ ์ง์ ์์ 2๋ฒ, N๋ฒ ์ง์ ์๊ณผ ๊ฐ์ง ์์์ผ ํ๋ค.
- N๋ฒ ์ง์ ์์ N-1๋ฒ, 1๋ฒ ์ง์ ์๊ณผ ๊ฐ์ง ์์์ผ ํ๋ค.
- i(2 ≤ i ≤ N-1)๋ฒ ์ง์ ์์ i-1, i+1๋ฒ ์ง์ ์๊ณผ ๊ฐ์ง ์์์ผ ํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ง์ ์ N(2 ≤ N ≤ 1,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๊ฐ ์ง์ ๋นจ๊ฐ, ์ด๋ก, ํ๋์ผ๋ก ์น ํ๋ ๋น์ฉ์ด 1๋ฒ ์ง๋ถํฐ ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค. ์ง์ ์น ํ๋ ๋น์ฉ์ 1,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ชจ๋ ์ง์ ์น ํ๋ ๋น์ฉ์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
import sys
from collections import deque
n=int(sys.stdin.readline())
# ๋นจ๊ฐ ์ด๋ก ํ๋ ์น ํ๋ ๋น์ฉ
cost=[list(map(int, sys.stdin.readline().split(' '))) for _ in range(n)]
# ์๊ฐ์ด๊ณผ ์ฝ๋(bfs)
# 1๋ฒ ์ง์ ๋นจ, ์ด, ํ๋ก ์น ํ๋ ๊ฒฝ์ฐ
# ๋นจ=0, ์ด=1, ํ=2
# minvalue=1e9
# for one in range(3):
# # ์ปฌ๋ฌ ๊ฐ๊ณผ ๋น์ฉ๊ณผ ์ธ๋ฑ์ค ์ ์ฅ
# queue=deque()
# queue.append((one, cost[0][one], 0))
# while queue:
# cur_color, cur_cost, cur_idx =queue.popleft()
# if cur_idx==n-1:
# minvalue=min(cur_cost, minvalue)
# elif cur_idx==n-2:
# for new_color in range(3):
# if new_color!=one and new_color!=cur_color:
# queue.append((new_color, cur_cost+cost[cur_idx+1][new_color], cur_idx+1))
# else:
# for new_color in range(3):
# if new_color!=cur_color:
# queue.append((new_color, cur_cost+cost[cur_idx+1][new_color], cur_idx+1))
#
# print(minvalue)
# dp๋ฅผ ์ด์ฉํด์ ํ์ด๋ณด์
# ๋นจ=0, ์ด=1, ํ=2
ans=1e9
for i in range(3):
dp=[[1e9, 1e9, 1e9] for _ in range(n)]
dp[0][i]=cost[0][i]
for j in range(1, n):
dp[j][0]=cost[j][0]+min(dp[j-1][1], dp[j-1][2])
dp[j][1]=cost[j][1]+min(dp[j-1][0], dp[j-1][2])
dp[j][2]=cost[j][2]+min(dp[j-1][0], dp[j-1][1])
for c in range(3):
if c!=i:
ans=min(ans, dp[n-1][c])
print(ans)
์ฒ์์ BFS๋ก ํ๊ธฐ๋ฅผ ์๋ํ๋ค๊ฐ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค..! ์ง์ ๊ฐ์ N์ด ์ต๋ 1000๊ฐ์ธ๋ฐ, ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ค ํ์ํ๋ ค๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋ ์ ๋ฐ์ ์๊ธด ํ๋ค.
๊ทธ๋์ DP๋ฅผ ์ด์ฉํด์ ํ์ด๋ณด๊ธฐ๋ก ํ๋ค! ์ฒ์์ DP๋ก ์ ๊ทผํ๋ ๋ฐฉ์์ด ์ด๋ ค์์ ํค๋งธ๋ค.
์ฐ์ dp ๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ์ง์ ๋นจ๊ฐ(0), ์ด๋ก(1), ํ๋(2)์ผ๋ก ์ค์ ํ๋ ๊ฒฝ์ฐ๋ฅผ for๋ฌธ์ ์ด์ฉํด์ ๋ฐ๋ณตํ๋ฉด์ ํ์ํด์ฃผ๊ณ , ์ฒซ ๋ฒ์งธ ์ง์ ๊ฐ๊ฐ์ ์์ผ๋ก ์ค์ ํ ์ํ์์ i๋ฒ์งธ ์ง์ ๋นจ๊ฐ, ์ด๋ก, ํ๋์ผ๋ก ์ค์ ํ๋ ๊ฒฝ์ฐ ๊ฐ๊ฐ์ ์ต์ ๋น์ฉ์ ์ ์ฅํ๊ธฐ ์ํด์ dp[n][3] ํฌ๊ธฐ์ 1e9๋ก ์ด๊ธฐํ๋ ๋ฐฐ์ด๋ก ์ ์ธํ๋ค.
๊ทธ๋ฆฌ๊ณ , 2๋ฒ์งธ ์ง๋ถํฐ n๋ฒ์งธ ์ง๊น์ง ํ์์ ํด์ค๋ค.
dp[j][0]์ j๋ฒ์งธ ์ง์ ๋นจ๊ฐ์์ ์น ํ์ ๋์ ์ต์ ๋น์ฉ์ ๊ตฌํ๋ ๊ฒ์ด๋ค. ์ฐ์ , cost[j][0]์ ์ ์ฅ๋ ๋น์ฉ์ j-1๋ฒ์งธ ์ง์ ์ด๋ก์์ ์น ํ๊ฑฐ๋, ํ๋์์ ์น ํ๋ ๋น์ฉ ์ค ๋ ์์ ๊ฐ์ ๋ํด์ dp[j][0]์ ์ ์ฅํ๋ค.
j๋ฅผ 1์์ n-1๊น์ง ๋ฐ๋ณตํ๋ฉด์ dp[][] ๋ฐฐ์ด์ ์ต์ ๋น์ฉ์ ์ ์ฅํ๋ค.
๊ทธ๋ฆฌ๊ณ , ๊ฐ์ฅ ๋ฐ๊นฅ for๋ฌธ ์ฆ, ์ฒซ๋ฒ์งธ ์ง์ ์ด๋ค ์์ ์น ํ ๊ฒ์ธ์ง ๋ฐ๋ณตํ๋ for๋ฌธ์ด ๋๋ ๋๋ง๋ค ์ฒซ๋ฒ์งธ ์๊ณผ ๋ค๋ฅธ ์์ด ์น ํด์ง dp[n-1][c]์ ๊ฐ ์ค ์ต์๊ฐ์ผ๋ก ans๋ฅผ ๊ฐฑ์ ํ๋ค.
'์๊ณ ๋ฆฌ์ฆ > DP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 15989 ๐ฅ] 1, 2, 3 ๋ํ๊ธฐ 4 (0) | 2023.08.18 |
---|---|
[๋ฐฑ์ค 1943 ๐ฅ] ๋์ ๋ถ๋ฐฐ (0) | 2023.08.16 |
[๋ฐฑ์ค 2631 ๐ฅ] ์ค์ธ์ฐ๊ธฐ (0) | 2023.08.12 |
[๋ฐฑ์ค 11053 ๐ฅ] ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (0) | 2023.08.12 |
[๋ฐฑ์ค 10942 ๐ฅ] ํฐ๋ฆผ๋๋กฌ? (0) | 2023.07.12 |