알고리즘

[프로그래머스/LV2/구현] 호텔 대실

motti 2023. 12. 13. 20:22
반응형

 

문제 링크

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

 

프로그래머스

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

programmers.co.kr


풀이

 

def solution(book_time):
    answer = 0
    book_time = sorted(book_time)
    while len(book_time) >= 1:
        nxt = book_time[0][1]
        book_time.pop(0)
        answer += 1
        
        for i in range(len(book_time)):
            hour = int(book_time[0][0].split(":")[0])
            minute = int(book_time[0][0].split(":")[1])
            nxt_hour = int(nxt.split(":")[0])
            nxt_minute = int(nxt.split(":")[1])+10

            
            if hour*60+minute >= nxt_hour*60+nxt_minute: 
                nxt = book_time[0][1]
                book_time.pop(0)
     
            else:
                tmp = book_time.pop(0)
                book_time.append(tmp)


    return answer

 

1. 이틀동안 고민해서 푼 문제 어떤 생각으로 풀었는지 제대로 보기

2. 첫번째로 어려웠던 것은 조건에 맞을 경우 pop하는 것과 맞지 않을 경우 넘어가는 것이다.

처음에는 book_time[i]로 작성하여 리스트안에 있는 것을 탐색할때마다 조건에 맞으면 빼기로 했지만 이럴 경우 pop되는 순간 i가 고정적이지 않아 인덱스 에러가 난다.

이를 해결하기 위해 for문으로 길이만큼 탐색을 하되 매번 0번째 위치만 확인하고 조건에 맞으면 pop 조건에 맞지않으면 다시 append를 해주어 길이를 유지시켜주는 로직을 찾아냈다.

3. 그 다음으로는 조건에 맞는 시간계산이 자꾸 틀렸었다. 문자열로 된 시간을 시간, 분으로 나누어서 직접 크거나 같다라고 했지만 어떠한 경우에서인지 자꾸 틀리는 케이스가 있었다.

이를 해결하기 위해 시간*60+분 으로 하여 절대적인 시간개념을 사용하여 해결할 수 있었다.

반응형