https://www.acmicpc.net/problem/1149
1149번: RGB거리
첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나
www.acmicpc.net
문제 한줄 이해
-N개의 집이 있을때 문제에 주어진 규칙에 따라 집에 색칠을 칠할때 최소비용 구하기!
생각난 풀이
1번째 방법: 처음에는 첫번째 집이 각각 R, G, B의 경우에 따라 모든 경우의 수를 재귀함수를 통해 구현했다.
import sys
n = int(sys.stdin.readline())
homes = []
for i in range(n):
homes.append(list(map(int,sys.stdin.readline().split())))
def back(start,cnt,result):
global ans
if cnt == n:
if ans > result:
ans = result
return
for i in range(3):
if i != start and result < ans:
back(i,cnt+1,homes[cnt][i]+result)
for i in range(3):
back(i,0,0)
print(ans)
하지만 50퍼까지는 오르고 시간초과,,, 원인은 코드상 시간복잡도가 3^n-1이라 최악의 경우 엄청난 연산을 하게 된다.....
2번째 방법: 방법이 떠오르지 않아 우선 알고리즘 분류를 확인했다.
다름 아닌 다이나믹 프로그래밍 그래서 최대한 점화식의 규칙성을 찾으려고 노력했다.
각각 R G B의 경우를 나눠서 확인 해줘야 하는건 분명했다.
다이나믹 프로그래밍은 아이디어를 떠올리는게 쉽지 않은거 같다. 계속 연습해야겠다.
'알고리즘 > Python' 카테고리의 다른 글
[백준] 9465 - 스티커 (0) | 2023.08.01 |
---|---|
[백준] 1629 - 곱셈 (0) | 2023.07.31 |
[백준] 16953 - A -> B (0) | 2023.07.28 |
[백준] 11725 - 트리의 부모 찾기 (0) | 2023.07.24 |
[백준] 15657 - N과M (0) | 2023.07.23 |