article thumbnail image
Published 2022. 9. 30. 16:14

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpFQaAQMDFAUq 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 


풀이


def solve(index, cost):
    global rst
    if cost > rst: return
    if index >= 12:
        rst = min(cost, rst)
        return
    if schedule[index]:
        solve(index+1, cost+(schedule[index] * d))
        solve(index+1, cost+m)
        solve(index+3, cost+m3)
        solve(index+12, cost+y)
    else:
        solve(index+1, cost)

for tc in range(int(input())):
    d, m, m3, y = map(int, input().split())
    schedule = list(map(int, input().split()))

    rst = 0xffffffff
    solve(0, 0)
    print(f'#{tc+1}', rst)

 


후기 및 해설

  • 백트래킹으로 푼 문제이다.
  • 다른 풀이들을 보니 반복 또는 dp가 실행시간이 빠르지만, 백트래킹으로 모든 경우의 수를 재귀로 돌리면, 
  • 알아서 최소값을 만들어줘서 백트래킹으로 풀었다.
  • 1월에서 12월까지 (함수의 index) 증가하면서 모든 경우의 수를 조합해본다.

 

'SWEA' 카테고리의 다른 글

SWEA 2115 벌꿀채취 (파이썬)  (0) 2022.10.06
SWEA 4008 숫자 만들기 (파이썬)  (0) 2022.09.30
SWEA 1251 하나로 (파이썬)  (1) 2022.09.30
SWEA 1249 보급로 (파이썬)  (1) 2022.09.30
SWEA 5250 최소비용 bfs (파이썬)  (0) 2022.09.29
복사했습니다!