문제후기
- 문제를 보고 이해하는데 오래걸렸습니다. 문제는 R, G, B 값이 하나씩 주어지는데 이때 앞뒤의 집과 달라야한다는 것과 R, G, B를 그리는데 사용되는 페인트의 양이 최소가 되도록 하는 것입니다. 문제를 보고 DP를 보고 풀면 되겠다고 생각했고 이전에 프로그래머스에서 푼 땅따먹기와 같다고 판단했습니다.
- R, G, B값과 이전까지 더해진 값의 합을 다시 저장합니다. 이때 이전 위치와 같은 경우는 제외합니다.
- 마지막 줄에서 가장 최소의 값을 찾습니다.
예시 풀이
문제 예시를 DP를 이용하면 최종적으로 아래의 값이 나온다.
26 | 40 | 83 |
89(40+49) | 86(26+60) | 83(57+26) |
96(13+83) | 172(89+83) | 185(99+86) |
프로그래머스에서 비슷한 문제
문제링크
from sys import stdin
# N 개의 줄
N = int(stdin.readline())
# 배열 RGB값 n개
arr = [list(map(int, stdin.readline().split())) for _ in range(N)]
# 초기 설정값
answer = 1e9
# 1번쨰 줄부터 시작
for n in range(1,N):
for i in range(3):
# 미니멈 초기값
minimum = 1e9
for j in range(3):
# 이전과 같은 색인 경우 제외
# 가장 작은 값 찾기
if i != j and arr[n][i] + arr[n-1][j] < minimum:
minimum = arr[n][i] + arr[n-1][j]
# 가장 작은 값 기록
arr[n][i] = minimum
print(min(arr[-1]))
'백준' 카테고리의 다른 글
[백준] 줄 세우기 -Python (0) | 2021.01.18 |
---|---|
[백준] 가장 긴 바이토닉 부분 수열 -Python (0) | 2021.01.18 |
[백준] 욕심쟁이 판다 -Python (0) | 2021.01.12 |
[백준] 절대값 힙 -Python (0) | 2021.01.10 |
[백준] 미확인 도착지 -Python (0) | 2021.01.09 |