공부하고 기록하는, 경제학과 출신 개발자의 노트

프로그래밍/코딩테스트 문제풀이

[Python] 프로그래머스. 2019 카카오 겨울 인턴 recruit - 호텔 방 배정 (Level 4)

inspirit941 2020. 4. 2. 15:29
반응형

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

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

union find 형태의 문제. 백준 10775 공항 문제를 참고하면 좋다.

이런 형태의 문제는 이전에 풀어 봤다. k가 10^12나 되는 큰 크기이기 때문에, 저 숫자만큼의 배열이나 dictionary를 선언하지 않는 게 시간초과를 막는 핵심.

 

[Python] 백준 10775. 공항

https://www.acmicpc.net/problem/10775 10775번: 공항 문제 오늘은 신승원의 생일이다. 박승원은 생일을 맞아 신승원에게 인천국제공항을 선물로 줬다. 공항에는 G개의 게이트가 있으며 각각은 1에서 G까지의 번..

inspirit941.tistory.com

 

그리고, 내 풀이에서는 recursionLimit 제한을 높이지 않으면 효율성 테스트에서 한 문제가 런타임 에러 뜬다.

19년 12월 코딩테스트를 볼 때 디버깅하느라 시간 많이 잡아먹었던 원인 중 하나였다.

 

 

import sys
sys.setrecursionlimit(1500)
# 방을 찾는 함수
def find_empty_room(x, rooms):
# 현재 방넘버 x에 아무도 배정되지 않은 경우
if x not in rooms:
# 현재 방넘버 기준, 다음으로 빈 방 좌표를 저장한다.
rooms[x] = x + 1
# 현재 방넘버 x를 반환한다.
return x
# 아무도 배정받지 않은 방이 나올 때까지 함수를 시행한다.
p = find_empty_room(rooms[x], rooms)
rooms[x] = p + 1
return p
def solution(k, room_number):
# 해당 번호 기준, 그 번호보다 값이 크면서 빈 방의 좌표를 저장하는 dict
rooms = dict()
answer = []
for each_room in room_number:
empty_room = find_empty_room(each_room, rooms)
answer.append(empty_room)
return answer
반응형