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에 넣어주면 답이 된다.