반응형
lv. 2 단계의 코딩 테스트 연습 문제 중 '호텔 대실'에 대한 풀이를 설명하고 있습니다.
프로그래머스 - 호텔 대실 (Python)
코딩 테스트 연습 문제 풀이
위의 목차를 클릭하면 해당 글로 자동 이동 합니다.
원리
- 잠깐 쉴 겸 풀어본 문제였는데, 파이썬이여서 쉽게 풀 수 있었던 것 같다.
- 먼저 시작 시간과 끝 시간을 모두 분으로 바꾼다.
- 그리고 끝 시간의 경우 청소 시간을 고려해 10분씩 더해준다.
- 그러고 나서 시작 시간이 빠른 순서대로 정렬한다.
- 이제 앞 타임부터 하나씩 방을 잡아주면된다.
- 먼저, 방이 하나도 존재하지 않는 경우이다.
- 방을 하나 생성하고 거기에 사람을 넣는다.
- room 배열에 [시작시간, 종료시간] 을 하나 추가한다.
- 방이 여러개 있는 경우이다.
- 첫 방부터 문을 연다.
- 어? 사람이 있네? (방에 있는 사람의 끝 시간이 현재 사람의 시작 시간보다 큰 경우)
- 다음 방을 뒤진다.
- 만약 다음 방에 사람이 없네? (방에 있는 사람의 끝 시간이 현재 사람의 시작 시간보다 같거나 작은 경우)
- 그 방에 있던 사람 정보를 제거하고 새로운 사람의 정보를 넣는다.
- rooms[i] = [0, 250], 새로운 사람이 [250, 300] 이면
- rooms=[i] = [250, 300] 으로 변경된다.
- 방을 다 돌았는데 사람을 넣을 수가 없네?
- 새로운 방을 만든다.
- 첫 방부터 문을 연다.
- 먼저, 방이 하나도 존재하지 않는 경우이다.
- 이 로직이 끝난후에 rooms 배열의 사이즈를 잰다.
- 호텔을 운영하기 위해 필요한 방의 수를 구할 수 있다.
- 코드는 아래와 같다.
코드
def timesToMinute(time):
hh, mm = time.split(":")
return int(hh) * 60 + int(mm)
def solution(book_time):
answer = 0
room = list()
newBookArray = []
for book in book_time:
newBookArray.append([timesToMinute(book[0]), timesToMinute(book[1]) + 10])
newBookArray.sort(key=lambda x:x[0])
for newBook in newBookArray:
if len(room) == 0:
room.append(newBook)
else:
chk = False
for r in range(len(room)):
if room[r][1] <= newBook[0]:
room[r] = newBook
chk = True
break
if not chk:
room.append(newBook)
answer = len(room)
return answer
파이썬을 사용한다면 자료형에 자유로워서 아무래도 좋은 것 같다.
반응형
'알고리즘' 카테고리의 다른 글
프로그래머스 - 요격 시스템 (Python) (0) | 2024.10.14 |
---|---|
프로그래머스 - 이모티콘 할인행사 (2) | 2024.10.13 |
프로그래머스 - 도넛과 막대 그래프 (Python) (0) | 2024.10.13 |
프로그래머스 - 시소 짝꿍 (Python) (0) | 2024.10.13 |
프로그래머스 - 귤 고르기 (Python) (0) | 2024.10.13 |