문제후기
- 문제를 보고 이해하는데 오래걸렸습니다. 문제는 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) |
프로그래머스에서 비슷한 문제
코딩테스트 연습 - 땅따먹기
땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟
programmers.co.kr
문제링크
1149번: RGB거리
첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나
www.acmicpc.net
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 |