본문 바로가기

PS

뮤탈리스크 [BOJ 12869]

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