1) 문제 접근 방법
2-1) 맞은 소스 코드
N= int(input())
// 3차원 dp배열을 선언한다.
dp = [[[0 for _ in range(61)] for _ in range(61)] for _ in range(61)]
ans = 0
def dfs(a, b, c):
// a, b, c가 모두 0일 때, 0을 리턴한다
if a == 0 and b == 0 and c == 0:
return 0
// 이미 해당 위치에 값이 존재하는 경우는 해당 값을 리턴한다
// 왜 그러한가?
// 이미 최소값이 여기에 저장되어 있을 것이기 때문이다.
if dp[a][b][c]:
return dp[a][b][c]
// dfs 탐색 케이스 중에서 최소 경우를 dp 배열에 저장한다.
// 즉, 값이 제일 작을 때를 저장한다.
// 6가지 경우가 가능함을 알아야 한다
dp[a][b][c] = 1 + min(dfs(max(0, a-9), max(0, b-3), max(0, c-1)), dfs(max(0, a-9), max(0, b-1), max(0, c-3)), dfs(max(0, a-3), max(0, b-9), max(0, c-1)),
dfs(max(0, a-3), max(0, b-1), max(0, c-9)), dfs(max(0, a-1), max(0, b-9), max(0, c-3)), dfs(max(0, a-1), max(0, b-3), max(0, c-9)))
return dp[a][b][c]
scv = list(map(int, input().split()))
// scv의 크기가 3보다 작을 때, 값을 추가한다.
while len(scv) < 3:
scv.append(0)
ans = dfs(scv[0], scv[1], scv[2])
print(ans)
'PS' 카테고리의 다른 글
경주로 건설 [2020 카카오 인턴십] (1) | 2023.10.01 |
---|---|
양궁대회 [프로그래머스] (0) | 2023.08.25 |
인구이동 [BOJ 16234] (0) | 2023.08.12 |
문자열 압축 [프로그래머스] (0) | 2023.06.25 |
괄호변환 [프로그래머스] (0) | 2023.06.25 |