-
셔틀버스 (파이썬)코딩 테스트/프로그래머스 2023. 10. 9. 17:23
문제
https://school.programmers.co.kr/learn/courses/30/lessons/17678
솔루션
- 셔틀의 도착시간은 곧 출발 시간 (9시 도착한 셔틀은 9시 출발)
- [예제 2번] 9시에 출발하는 셔틀이 최대 2명 탑승 가능하고 하루에 두번만 운행 할 때 크루원들이 [8시, 9시9분, 9시 10분] 에 줄선다면 (8시에 도착한 멤버는 9시 셔틀을 혼자 타고) (9시 9분,9시 10분에 도착한 멤버들은 9시 10분에 도착(출발)하는 셔틀)에 타게 된다. 그런데 하루에 두 번만 셔틀이 운행하므로 주인공은 9시 10분에 도착하는 멤버보다 1분 먼저 도착해있어야 셔틀에 탈 수 있다.
- [예제 6번] 하루에 10번 운행하는 셔틀이 있고 최대 45명을 태우는 버스는 모든 크루원들이 9시 셔틀을 타고 출발한다. 주인공은 제일 마지막에 출발하고 싶어하므로 다른 셔틀들은 안타고 18시에 도착(출발) 마지막 셔틀을 타게 된다.
- 이것을 논리화하면 한 셔틀의 탑승 총 인원이 탑승 제한보다 작을 경우에는 주인공은 버스가 도착(출발)하는 시간에 줄서면 되고, 셔틀에 탑승한 총 인원이 탑승 제한과 같다면 탑승 마지막 인원보다 1분 먼저 줄서면 된다. ( 탑승 한 총 인원이 제한 인원보다 큰 경우는 다음 셔틀을 타게 되므로 신경ㄴㄴ)
- 계산하기 편하게 (시*60+분)으로 표현
코드
def solution(n, t, m, asdasd): answer = 0 timetable = [] for i in asdasd: aa = i.split(":") s = int(aa[0])*60 + int(aa[1]) timetable.append(s) timetable.sort() start = 540 //9시 출발 lt = len(timetable) crew = 0 // 셔틀에 탑승 할 멤버 인덱스 for i in range(n): passenger = 0 // 이번에 도착(출발)한 셔틀의 탑승 한 인원 수 while (passenger < m): if (crew < lt and timetable[crew] <= start): crew += 1 passenger += 1 else: break if (passenger == m): answer = timetable[crew-1]-1 if (passenger < m): answer = start start += t a = str(answer//60) if answer//60 >= 10 else "0"+str(answer//60) b = str(answer % 60) if answer % 60 >= 10 else "0"+str(answer % 60) result = a+":"+b return result print(solution(2, 10, 2, ["09:10", "09:09", "08:00"])) ''' n : 셔틀 운행 횟수 t : 셔틀 운행 간격 m : 한 셔틀에 탈 수 있는 최대 크루 수 timetable: 크루원들 도착하는 시각 '''
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
카운트 다운 (javascript) (0) 2024.05.14 뒤에 있는 큰수 찾기 (자바스크립트) (1) 2024.04.25 연속 펄스 부분 수열의 합 (0) 2023.10.06 [최단거리] 순위 (1) 2023.10.05 [DFS/BFS] 아이템 줍기 (파이썬) - 진행 중 (1) 2023.06.13