알고리즘

[Python] 프로그래머스 - 호텔 방 배정

BKM 2024. 11. 27. 23:10

문제

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

풀이

나의 풀이(정확도 Max / 효율성 Low)

def solution(k, room_number):
    answer = []
    booked = dict()
    for num in room_number:
        room = num
        if booked.get(num,0): # 원하는 방이 있는 경우
            room = booked[num]
            while booked.get(room,0):
                room=booked[room]+1
        booked[num] = room
        booked[room] = room
        answer.append(room)
            
    return answer

정확도 테케는 다 맞았는데, 효율성에서 한개 테케만 통과

풀이

시간을 더 줄일 수 있는 방법을 찾아보고 고민해보다가, 경로 압축을 적용

(런타임 에러가 발생해서, 재귀 limit 늘려줌)

def find(booked,num):
    if booked.get(num,0):
        booked[num] = find(booked,booked[num]+1)
    else:    
        booked[num] = num

    return booked[num]

def solution(k, room_number):
    import sys
    sys.setrecursionlimit(1000000)
    answer = []
    booked = dict()
    for num in room_number:
        room = find(booked,num)
        answer.append(room)

    return answer