알고리즘 백준 1149 RGB거리(파이썬)
백준 RGB거리 파이썬
백준 파이썬 RGB거리
문제
RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다.
집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자.
- 1번 집의 색은 2번 집의 색과 같지 않아야 한다.
- N번 집의 색은 N-1번 집의 색과 같지 않아야 한다.
- i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다.
입력
첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 모든 집을 칠하는 비용의 최솟값을 출력한다.
코드
import sys
if __name__ == '__main__':
N = int(sys.stdin.readline())
emptyList=[]
for i in range(N): #1)
number = list(map(int,sys.stdin.readline().split()))
emptyList.append(number)
# print(emptyList)
for k in range(1,len(emptyList)): #2)
emptyList[k][0] = min(emptyList[k-1][1],emptyList[k-1][2]) + emptyList[k][0]
emptyList[k][1] = min(emptyList[k-1][0],emptyList[k-1][2]) + emptyList[k][1]
emptyList[k][2] = min(emptyList[k-1][0],emptyList[k-1][1]) + emptyList[k][2]
print(min(emptyList[N-1][0],emptyList[N-1][1],emptyList[N-1][2]))
코드설명
0) 앞 뒤로 다른색을 써야한다고 했음으로 간단하게
내가 선택한 색깔과 전단계의 색깔중에의 최솟값을 찾아서 넣어주면됨!
ex) 내가 2번째에 빨간색을 선택하였다면 그린+빨간색 과 파랑+빨간색 중 최소값만을 빨간색에 저장
최솟값만을 저장시켜주면 최솟값만 도출되게됨!
시작하는 기준점은 앞뒤로 비교하기 위해 두번째부터시작
#1) 빨파초를 저장하기 위해 이중 리스트로 만듦
#2) 두번째부터 선택한 색깔과 전단계의 색깔중에서 최솟값을 찾아 값을 추가해줌
깃허브
'알고리즘' 카테고리의 다른 글
알고리즘 백준 1463 1로 만들기(파이썬) (0) | 2022.01.23 |
---|---|
알고리즘 백준 2579 계단 오르기(파이썬) (0) | 2022.01.22 |
알고리즘 백준 9461 파도반 수열(파이썬) (0) | 2022.01.20 |
알고리즘 백준 1904 01타일(파이썬) (0) | 2022.01.20 |
알고리즘 백준 9184 신나는 함수 실행(파이썬) (0) | 2022.01.20 |