import sys
sys.setrecursionlimit(10**6)
def solution(k, room_number):
global pointer
pointer = {}
return [check_in(room) for room in room_number]
def check_in(room) :
if room not in pointer :
pointer[room] = room + 1
return room
pointer[room] = (avail := check_in(pointer[room]))
return avail
알고리즘
체크인 할때 방이 가리키는 포인터의 방으로 체크인 하도록 한다.
1번방 체크인 시 2번방 배정해준 뒤 2번방 포인터 3번방으로
4번방 체크인 시 4번방 배정해준 뒤 4번방 포인터 5번방으로
7번방 체크인 시 9번방 배정해준 뒤 9번방 포인터 10번방으로
이런식으로 재귀적으로 배정할 방을 찾아줘서 배정해주고 포인터로 연결 시키면된다.
import sys
sys.setrecursionlimit(10**6)
def solution(k, room_number):
global pointer
pointer = {}
return [check_in(room) for room in room_number]
def check_in(room) :
if room not in pointer : # 빈방일 경우
pointer[room] = room + 1
return room
pointer[room] = (avail := check_in(pointer[room])) # 빈방찾을 때 까지 재귀
return avail