09009

*** [프로그래머스 lv2] 피로도 본문

Algorithm/완전탐색
*** [프로그래머스 lv2] 피로도
09009

문제 보기

https://school.programmers.co.kr/learn/courses/30/lessons/87946

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 해결

난 순열 조합으로 문제 풀이를 하였지만 백트래킹으로 푸는 방법도 있었다.

기업 코딩테스트에 많이 나오는 풀이법이라고 하니 꼭 알아두자.

 

 

소스 코드

from itertools import permutations
def solution(k, dungeons):
    answer = 0
    
    for per in permutations(dungeons, len(dungeons)):
        tmp_k = k
        count = 0
        for p in per:
            if tmp_k >= p[0]:
                tmp_k -= p[1]
                count += 1
        answer = max(answer, count)            
        
    
    return answer

 

 

 

- 백트래킹 풀이법

def solution(k, dungeons):
    global answer
    answer = 0
    
    n = len(dungeons)
    visited = [False] * n
    
    tmp_k = k

    def dfs(tmp_k, cnt):
        global answer
        if cnt > answer:
            answer = cnt
        for i in range(n):
            if tmp_k >= dungeons[i][0] and not visited[i]:
                visited[i] = True
                dfs(tmp_k - dungeons[i][1], cnt + 1)
                visited[i] = False

    dfs(k, 0)
    return answer

 

 

 

'Algorithm > 완전탐색' 카테고리의 다른 글

[백준 15649] N과 M (1)  (0) 2023.12.20
[프로그래머스 lv1] 최소 직사각형  (0) 2023.09.23