JLOG
[Python] 코드업 3501 : RGB(small) 풀이 본문
# import list to save
price_info = []
total_price_set = []
# Get input data
x = int(input())
for i in range(x) : #{
price_info.append(list(map(int,input().split(" "))))
#}
# FOR TESTING
# x = 3
# price_info = [[26, 40, 83], [49, 60, 57], [13, 89, 99]]
# Process
# 첫번째 집부터 색이 안겹치는 조건에 따라 재귀함수를 사용해 총 가격을 check 해준다.
# 중간 계산 과정에서 이미 계산한 total 값보다 가격이 높다면 return으로 재귀를 빠져 나온다.
# total_price_set에서 최소 가격을 출력한다.
def calculate_price(clr, data, price_info, total): #{
total += data
# 중간 계산 값이 total 보다 크면 계산을 멈춘다.
if len(total_price_set) > 0 :
if min(total_price_set) < total :
return
# 집을 모두 확인했을 때 return으로 재귀함수를 마무리 해준다.
if len(price_info) == 0 :
total_price_set.append(total)
return
# 현재 집 색깔에 따라 다음 확인할 집 경우의 수(next)를 함수로 저장해준다.
if clr == 'r' : #{
next = [['g', 1], ['b', 2]]
#}
elif clr == 'g' : #{
next = [['r', 0], ['b', 2]]
#}
elif clr == 'b' : #{
next = [['r', 0], ['g', 1]]
#}
else : #{
next = [['r', 0], ['g', 1], ['b', 2]]
#}
# 경우의 수를 for으로 돌면서 재귀함수를 이용해 체크해준다.
for n in next : #{
calculate_price(n[0], price_info[0][n[1]] ,price_info[1:], total)
#}
#}
calculate_price('n', 0, price_info, 0)
print(min(total_price_set))
'Algorithm > 알고리즘 풀이' 카테고리의 다른 글
[C++] 백준 1018 : 체스판 다시 칠하기 (0) | 2021.05.21 |
---|---|
[Python] 코드업 2632 : 계단 오르기1 풀이 (0) | 2020.09.03 |
[Python] 코드업 3021 : 큰 수 덧셈 풀이 (0) | 2020.05.28 |
[Python] 코드업 2610 : 그림판 채우기 (0) | 2020.05.26 |
[Python] 코드업 #3130 : 소들의 헤어스타일 (0) | 2020.05.22 |
Comments