본문 바로가기
알고리즘

프로그래머스 - 호텔 대실 (Python)

by 뿔난 도비 2024. 10. 13.
반응형

lv. 2 단계의 코딩 테스트 연습 문제 중 '호텔 대실'에 대한 풀이를 설명하고 있습니다.

 

프로그래머스 - 호텔 대실 (Python)

 

코딩 테스트 연습 문제 풀이

 

1. 원리

2. 코드

위의 목차를 클릭하면 해당 글로 자동 이동 합니다.

 

원리

  • 잠깐 쉴 겸 풀어본 문제였는데, 파이썬이여서 쉽게 풀 수 있었던 것 같다.
  • 먼저 시작 시간과 끝 시간을 모두 분으로 바꾼다.
  • 그리고 끝 시간의 경우 청소 시간을 고려해 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

 

파이썬을 사용한다면 자료형에 자유로워서 아무래도 좋은 것 같다.

반응형