코테 노트/프로그래머스

Level 3 [1차] 셔틀버스 <KAKAO 2018 BLIND RECRUITMENT> Python3

화요밍 2021. 7. 30. 20:34
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/17678?language=python3 

 

코딩테스트 연습 - [1차] 셔틀버스

10 60 45 ["23:59","23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59"] "18:00"

programmers.co.kr

 

최종 풀이

 

GitHub - hwayeon351/Programmers-Algorithms: 프로그래머스 알고리즘 소스 코드 모음

프로그래머스 알고리즘 소스 코드 모음. Contribute to hwayeon351/Programmers-Algorithms development by creating an account on GitHub.

github.com

from collections import deque
def solution(n, t, m, timetable):
    suttle = [["09:00", 0, ""]]
    timetable.sort()
    #셔틀 운행 시간 구하기
    for i in range(1, n):
        hh, mm = divmod(t*i, 60)
        suttle.append([str(9+hh).zfill(2) + ":" + str(mm).zfill(2), 0, ""])
    #크루들 셔틀 태우기
    bus = 0
    for crew in timetable:
        if bus == len(suttle): break
        #현재 크루가 현재 셔틀 시간보다 이전에 도착한 경우, 
        if suttle[bus][0] >= crew:
            suttle[bus][1] += 1
            suttle[bus][2] = crew
            if suttle[bus][1] == m: bus += 1
            continue
        #현재 크루가 탈 수 있는 셔틀 시간을 찾아서 태우기
        bus += 1
        while bus < len(suttle):
            if suttle[bus][0] >= crew:
                suttle[bus][1] += 1
                suttle[bus][2] = crew
                break
            bus += 1
    #콘 태우기
    if suttle[-1][1] < m: return suttle[-1][0]
    hh = int(suttle[-1][2][:2])
    mm = int(suttle[-1][2][3:])
    if mm == 0: return str(hh-1).zfill(2)+":59"
    return str(hh).zfill(2) + ":" + str(mm-1).zfill(2)

풀이 과정

풀이 시간 50분

from collections import deque
def solution(n, t, m, timetable):
	#suttle[i] = [운행 시간, 탑승자 수, 마지막 탑승자 시간]
    suttle = [["09:00", 0, ""]]
    #크루 도착시간을 오름차순으로 정렬 -> O(nlogn)
    timetable.sort()
    
    #셔틀 운행 시간 구하기
    for i in range(1, n):
        hh, mm = divmod(t*i, 60)
        suttle.append([str(9+hh).zfill(2) + ":" + str(mm).zfill(2), 0, ""])
        
    #크루들 셔틀 태우기 -> O(n)
    bus = 0
    for crew in timetable:
    	#마지막 셔틀버스까지 모두 태운 경우
        if bus == len(suttle): break
        
        #현재 크루가 현재 셔틀 시간보다 이전에 도착한 경우, 크루를 셔틀버스에 태운다
        if suttle[bus][0] >= crew:
            suttle[bus][1] += 1
            suttle[bus][2] = crew
            #셔틀버스에 사람이 꽉 찬 경우
            if suttle[bus][1] == m: bus += 1
            continue
            
        #현재 크루가 탈 수 있는 셔틀버스 시간을 찾아서 태우기
        bus += 1
        while bus < len(suttle):
            if suttle[bus][0] >= crew:
                suttle[bus][1] += 1
                suttle[bus][2] = crew
                break
            bus += 1
            
    #콘 태우기
    #마지막 셔틀버스에 사람이 꽉 차있지 않은 경우, 셔틀버스 시간에 콘이 도착한다
    if suttle[-1][1] < m: return suttle[-1][0]
    #마지막 셔틀버스에 사람이 꽉 차있는 경우, 마지막으로 셔틀버스에 탄 크루의 시간보다 1분 전에 콘이 도착한다
    hh = int(suttle[-1][2][:2])
    mm = int(suttle[-1][2][3:])
    if mm == 0: return str(hh-1).zfill(2)+":59"
    return str(hh).zfill(2) + ":" + str(mm-1).zfill(2)
 #시간복잡도 = O(nlogn), 공간복잡도 = O(n)

2021.07.30 기록

 6개월 전(2021.02)에 KAKAO 2018 BLIND RECRUITMENT 1차 코딩테스트를 봤을 때, 5시간 동안 5문제를 풀었다.(셔틀버스 문제를 풀다가 시간이 종료됐다.)

이번에는 4시간 35분동안 셔틀버스 문제를 포함하여 6문제를 풀 수 있었다.

비록, 6개월 전에 5문제를 풀어봤었지만 코테 공부를 하면서 점점 늘어가는 것 같아서 보람차다.

카카오 첫 블라인드 코테인 만큼 이후 코테 난이도보다 쉬울거라고 생각든다.

최근으로 갈 수록 난이도가 점점 더 어려워질테니까 더 많이 공부해서 실력을 키워야 겠다.

할 수 있다 화이팅!

 


참고

 

Level 1 [1차] 비밀지도 Python3

programmers.co.kr/learn/courses/30/lessons/17681?language=python3 코딩테스트 연습 - [1차] 비밀지도 비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비..

hwayomingdlog.tistory.com

 

Level 1 [1차] 다트게임 Python3

programmers.co.kr/learn/courses/30/lessons/17682 코딩테스트 연습 - [1차] 다트 게임 programmers.co.kr 최종 코드 GitHub github.com/hwayeon351/Programmers-Algorithms hwayeon351/Programmers-Algorithms..

hwayomingdlog.tistory.com

 

Level 2 [1차] 캐시

programmers.co.kr/learn/courses/30/lessons/17680?language=python3 코딩테스트 연습 - [1차] 캐시 3 [Jeju, Pangyo, Seoul, NewYork, LA, Jeju, Pangyo, Seoul, NewYork, LA] 50 3 [Jeju, Pangyo, Seoul, Jeju,..

hwayomingdlog.tistory.com

 

Level 2 [1차] 뉴스 클러스터링

programmers.co.kr/learn/courses/30/lessons/17677?language=python3 코딩테스트 연습 - [1차] 뉴스 클러스터링 뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기..

hwayomingdlog.tistory.com

 

Level 2 [1차] 프랜즈 4블록

programmers.co.kr/learn/courses/30/lessons/17679 코딩테스트 연습 - [1차] 프렌즈4블록 프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제

hwayomingdlog.tistory.com

 

Level 3 [1차] 추석 트래픽 Python3

https://programmers.co.kr/learn/courses/30/lessons/17676?language=python3 코딩테스트 연습 - [1차] 추석 트래픽 입력: [ "2016-09-15 20:59:57.421 0.351s", "2016-09-15 20:59:58.233 1.181s", "2016-09-15..

hwayomingdlog.tistory.com

 

728x90
반응형