[Python] 프로그래머스 : 호텔 대실

https://school.programmers.co.kr/learn/courses/30/lessons/155651

 

프로그래머스

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

programmers.co.kr

테스트 케이스 9, 17에서 계속 막혔었는데,,, 만일 객실 종료 시간이 60분이 넘었을 경우 (예 : 10:59) 처리를 잘 못해주고 있었다. 

시간 transform은 transform 함수를 이용해서 간단하게 처리한다. solution 함수에서는 for문을 돌며 새 방이 필요한지, 청소로만으로 충분히 이용 가능한지를 판별해준다. 그리디 문제이기 때문에 가장 이용이 빨리 끝나는 방에 가장 이용을 빨리 하려는 사람을 배정해주려 했다. 개인적으로 백준 퇴사(https://www.acmicpc.net/problem/1931) 문제와 접근 방법도, 로직도 유사하다고 생각한다. 다른 점은 그저... transform을 사용해도 되냐, 안 되냐의 차이인 것 같음

def transform(time):
    if int(time[3:]) + 10 >= 60:
        return str(int(time[:2]) + 1).zfill(2) + str(int(time[3:]) + 10 - 60).zfill(2)
    return time[:2] + str(int(time[3:]) + 10).zfill(2)


def solution(book_time):
    answer = 0
    book_time.sort(key = lambda x: x[0])
    rooms = [] #마지막 시간을 저장할 리스트
    for idx in range(len(book_time)):
        start_time = book_time[idx][0][:2] + book_time[idx][0][3:] # 새 예약의 대실 시작 타임       
        if idx == 0:
            rooms.append(transform(book_time[0][1]))
            answer += 1
            print(rooms)
        else:
            for i in range(len(rooms)):
                if rooms[i] > start_time: # 새 방이 필요한 경우
                    answer += 1
                    rooms.append(transform(book_time[idx][1]))
                    rooms.sort()
                    break
                else: #방 청소 후 대실 가능
                    rooms[i] = transform(book_time[idx][1])
                    rooms.sort()
                    break
    return answer

 

TAGS.

Comments