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

IT공부중·2020년 4월 8일
2

알고리즘

목록 보기
10/49

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

시험칠 때 내가 작성한 코드로는 정확성 테스트 밖에 통과하지 못 했다. 효율성 테스트는 통과하지 못 했다. 그냥 하나하나 찾는 for문이였기 때문이다. 그래서 카카오 해설집을 보고 다른 사람들의 코드를 참고하여 코드를 작성하고 이해했다.

import sys
sys.setrecursionlimit(10000000) # 설정해주지 않으면 재귀가 많이 일어나면서 런타임에러 등이 나타날 수 있다.

def findEmptyRoom(number, rooms): # 빈방을 찾는 함수
    if number not in rooms:        
        rooms[number] = number + 1
        return number
    
    empty = findEmptyRoom(rooms[number], rooms)
    rooms[number] = empty + 1
    return empty


def solution(k, room_number):
    answer = []
    rooms = dict() # 몇번 방이 비어있는지 체크하는 딕셔너리

    for number in room_number:
        emptyRoom = findEmptyRoom(number, rooms)
        answer.append(emptyRoom)
    
    return answer

findEmptyRoom 함수는 number가 rooms에 key로써 존재하지 않으면 rooms[number]에 number + 1을 설정해준다. 그러면 number를 원하면 number + 1을 배정해주는 것이다. 그리고 number를 반환해준다.
만약 rooms에 number가 존재하면 재귀를 통해 빈 방을 찾는다. 그리고 rooms[number]에 그 빈방의 값의 + 1을 더한 값을 넣어주고 빈방의 값을 반환해준다.

solution에서는 받은 room_number 리스트를 반복문으로 돌려 빈방을 찾고 찾은 빈방을 순서대로 answer에 넣어주면 답이 된다.

profile
4년차 프론트엔드 개발자 문건우입니다.

0개의 댓글