반응형
https://school.programmers.co.kr/learn/courses/30/lessons/155651
[문제]
요약
입력으로 들어오는 예약이 겹치지 않도록 잘 조율해서 배치한다.
이렇게 배치 했을때 최소로 배치할 수 있는 방 갯수를 반환한다.
본인은 이렇게 해결했습니다.
1. 입력된 예약 배열의 자료형을 String에서 시간 객체로 변환하여 다시 저장한다.
2. 탐욕법을 사용해서 해결하기 위해 최소시간 기준으로 정렬하여 탐색이 효율적으로 동작하게 한다.
3. 예약을 하나씩 확인하며 현재 예약시간이 비어있는 방을 탐색한다.
4. 확인하는 예약시간대가 비어있는 방에 바로 append 한다.
5. append 할 수 있는 방이 있으나 마지막 퇴실시간과 가장 근접한 방에 입력되도록 flag를 새워 가장 근접한 방을 찾도록 한다.
6. 방들의 갯수를 반환한다.
import datetime
def solution(book_time):
for book in book_time:
book[0] = datetime.datetime.strptime(book[0], "%H:%M")
book[1] = (datetime.datetime.strptime(book[1], "%H:%M") + datetime.timedelta(minutes=10))
flag = 1
book_time.sort(key=lambda x:x[0])
rooms = [book_time.pop(0)]
for book in book_time:
for room in rooms:
tmp = room
while type(tmp) != datetime.datetime: tmp = tmp[-1]
if tmp <= book[0]:
room.append(book)
flag = 0; break
else: flag = 1
if flag:
rooms.append(book)
print(rooms)
return len(rooms)
문제를 풀고나서 느낀 것이 코드 본문에 datetime보다는 입력된 예약 시간들을 (h*60+m)과 같이 정수형으로 저장해서 계산하는 것이 조금 더 빠를 것같다는 생각이 들었습니다.
반응형
'문제풀이' 카테고리의 다른 글
디펜스 게임 - 구현 (0) | 2023.02.27 |
---|---|
1309 - 동물원 (0) | 2023.02.24 |
두 수의 차 (0) | 2023.02.21 |
오픈 채팅방 (0) | 2021.10.26 |
이진 변환 반복하기 (0) | 2021.10.26 |
댓글