728x90
반응형
https://www.acmicpc.net/problem/2666
2666번: 벽장문의 이동
첫 번째 줄에 벽장의 개수를 나타내는 3보다 크고 20보다 작거나 같은 하나의 정수, 두 번째 줄에 초기에 열려있는 두 개의 벽장을 나타내는 두 개의 정수, 그리고 세 번째 줄에는 사용할 벽장들
www.acmicpc.net
문제 해결
- 재귀를 이용해 모든 경우를 해보면서 최적의 해를 출력
- 내 생각에는 함수 구현 문제라고 보는 겻이 편하다.
CODE
import sys
input = sys.stdin.readline
n = int(input())
first, second =map(int,input().split())
m = int(input())
orders = []
dp = [[[0 for _ in range(n+1)] for _ in range(n+1)] for _ in range(n+1)]
for _ in range(m):
orders.append(int(input()))
def solve(x,door1,door2):
if x ==m:
return 0
val = orders[x]
dp[val][door1][door2] = min(abs(val-door1)+solve(x+1,val,door2), abs(val-door2)+solve(x+1,door1,val))
return dp[val][door1][door2]
print(solve(0,first,second))
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 2157 여행 (0) | 2023.05.07 |
---|---|
[python] 백준 1132 합 (0) | 2023.05.07 |
[python] 백준 2831 댄스 파티 (0) | 2023.05.06 |
[python] 백준 13144 List of Unique Numbers (0) | 2023.05.06 |
[python] 백준 1062 가르침 (0) | 2023.05.05 |
댓글