JLOG

[Python] 코드업 3501 : RGB(small) 풀이 본문

Algorithm/알고리즘 풀이

[Python] 코드업 3501 : RGB(small) 풀이

정정선선 2020. 8. 28. 21:34
# 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))

 

Comments