티스토리 뷰

문제주소

programmers.co.kr/learn/courses/30/lessons/17678

내 풀이

from collections import deque

def solution(n, t, m, timetable):
    time_table = []
    for time in timetable:
        times = time.split(":")
        time_table.append(int(times[0]) * 60 + int(times[1]))
    time_table.sort()
    time_table = deque(time_table)
    # 셔틀버스 확인
    candidate = 0
    for i in range(n):
        start_time = 9 * 60 + t * i
        time_list = []
        for _ in range(m):
            if time_table:
                time = time_table.popleft()
            else:
                break
            if time <= start_time:
                time_list.append(time)
            else:
                time_table.appendleft(time)
                break
        if len(time_list) < m:
            candidate = start_time
        else:
            candidate = max(time_list) - 1
    # 문자로 재변환
    hour = str(candidate // 60)
    hour = hour if len(hour) == 2 else "0" + hour
    minute = str(candidate % 60)
    minute = minute if len(minute) == 2 else "0" + minute
    return hour + ":" + minute

처음에 9:00 인 경우와 아닌경우를 나눴는데, 둘다 상관없이 그전에 도착한 사람부터 차례대로 세어야 했다. 쓸데 없이 조건문을 나누고 있었다. deque가 다 비워진 경우도 확인해줘야 하고, 잘못 뺀 값은 다시 넣어줘야 되어 deque를 사용했다. 뭔가 어렵지 않은 문제 같았는데 생각보다 시간이 좀 걸렸다😂

다른 사람 풀이

time_table 셋팅을 좀 더 간단하게 한줄로 하는 풀이가 많았다.

timetable=[int(i[:2])*60+int(i[3:]) for i in timetable]

마지막에 문자로 재변환하는 방법은 여러가지가 있었다.

#방법1 : % 사용
'%02d:%02d' % (last_time // 60, last_time % 60)

#방법2 : rjust 사용 , divmon는 목과 나머지를 tuple로 반환한다
str(divmod(answer,60)[0]).rjust(2,'0')+':'+str(divmod(answer,60)[1]).rjust(2,'0')

#방법3 : zfill 사용
str(~~).zfill(2)

정리

조건 분기가 그렇게 까다롭지 않았는데, 역시 구현력이 부족한지.. 2시간은 걸린 것 같다. 좀 더 간단하게 로직을 정리하고 구현하는 습관을 길들이자! 뭔가 이렇게 하다보면 나오려나!? 하고 작성하다가 테스트케이스에 안 맞으면 추가하고... 이런 방식으로 하는 건 좋지 않다! 최대부터 또 탐색하려고 했는데 역시 문제가 하라는 대로 하자~

카카오 문제에서 주어지는 범위의 숫자가 적다면 완전탐색! 가능성이 매우 높은 듯 하다. 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함