프로그래머스_피로도

임정민·2023년 11월 20일
0

알고리즘 문제풀이

목록 보기
128/173
post-thumbnail

프로그래머스 Lv2 문제입니다. 실전에 대비하기 위해 60분 시간제한을 두고 풀었습니다.

문제

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

[나의 풀이]

⌛ 13분


from itertools import permutations

def solution(k, dungeons):
    answer = -1
    
    for case in permutations(dungeons,len(dungeons)):
        
        now = [k,0]
        for dungeon in case:
            
            required = dungeon[0]
            used = dungeon[1]
            
            if required<=now[0]:
                now[0] -=used
                now[1] += 1
                
        if answer<now[1]:
            answer = now[1]
        
    return answer

입력된 피로도와 던전별 요구피로도, 소모피로도를 통해 최대로 탐험할 수 있는 던전수를 찾는 완전탐색 문제입니다. 🐬🐬🐬

던전별 요구사항이 존재하기 때문에 순서별 케이스를 구하기 위해 permutations을 활용하여 쉽게 구현할 수 있었습니다.

[다른 사람의 풀이1]


def solution(k, dungeons):
    answer = -1
    queue = deque()
    queue.append((k, []))

    while queue:
        k, route = queue.popleft()
        for i in range(len(dungeons)):
            a, b = dungeons[i]
            if k >= a and i not in route:
                temp = route + [i]
                queue.append((k - b, temp))
            else:
                answer = max(answer, len(route))

    return answer

BFS를 활용하여 피로도를 다 소모하였을 때 던전수를 갱신하는 방식입니다.

[다른 사람의 풀이2]


answer = 0

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

DFS 및 백트레킹을 활용한 풀이입니다.

감사합니다.

profile
https://github.com/min731

0개의 댓글