일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- dfs
- jvm
- leetcode
- 벤쿠버
- STL
- 프로그래밍언어론
- C++
- 파이썬
- BFS
- DP
- Java
- 라인
- 릿코드
- 딥러닝
- 라인플러스
- 스타벅스
- 스프링 프레임워크
- 다이나믹프로그래밍
- C/C++
- Python
- 시애틀
- 프로그래머스
- 머신러닝
- spring
- Spring Framework
- 백준
- 알고리즘
- 백트래킹
- binary search
- 모두를 위한 딥러닝
- Today
- Total
케이스윔의 개발 블로그
[프로그래머스][카카오] 셔틀버스 본문
문제
셔틀버스의 횟수, 간격, 줄을 기다리는 대기열의 배열이 주어졌을 때 셔틀버스를 탈 수 있는 도착 시각 중 가장 늦은 시각을 구하시오.
문제 출처: 프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/17678)
풀이
처음에 문제를 보고 쉽다고 생각이 들었지만 예제를 보니 꽤 어렵게 느껴졌습니다. 풀고나니 쉬운 문제였고 방금 풀었던 기억을 정리해보니 처음에 더 정리해서 풀었다면 빨리 풀었을 거라는 생각이 들었습니다. 우선 처음엔 어떻게 마지막 셔틀을 탈 수 있는 시간을 구할지 생각해보며 string으로 들어오는 timetable을 숫자로 바꾸는 작업을 했습니다. 09:00 와 같이 들어오기 때문에 hour = (timetable[i][0]-'0')*10 + (timetable[i][1]-'0'), minute = (timetable[i][3]-'0')*10 + (timetable[i][4]-'0') 로 변환하여 hour*60+minute값을 priority_queue에 넣어주었습니다.(대기열 순서대로 주어지지 않기 때문에 우선순위큐를 사용했습니다.) 큐에 넣은 다음부터는 셔틀버스에 n-1번 될 때까지 m명 이내의 승객을 태울 수 있도록 했습니다. 콘은 가능한 가장 늦은 셔틀버스를 타고 싶기 때문에 n-1번째 셔틀까지는 해당 셔틀이 출발하는 시각까지 도착하는 m명과 같거나 작은 승객들을 큐에서 빼내서 태웁니다. 이후에 마지막 셔틀일 때가 중요합니다. 만약 마지막 셔틀인데 이미 기다리던 크루들이 다 탔다면(우선순위 큐가 비었다면) 콘은 마지막 셔틀 시간에 맞춰서 가면 탈 수 있습니다. 하지만 아직 기다리는 크루들이 있다면 그 중 m번째 승객이 되어야합니다. 마지막 셔틀을 m-1번째까지 태웠을 때 두가지의 경우가 있습니다. 우선 첫번째는 m-1번째 태운 크루의 도착 시각과 그 다음 기다리는 크루의 도착시각이 같다면 콘은 m-1번째 승객보다 1분 빨리 도착해야합니다. 두번째는 m-1번째 크루 다음의 크루의 도착시각이 마지막 셔틀버스 출발시각보다 늦다면 콘은 해당 셔틀버스 출발시각에 도착하면 됩니다. 마지막에는 숫자로 바꾸었던 시간을 다시 string으로 바꾸어주면 됩니다. 글로 적어보니 (생각보다 더) 간단한... 문제였습니다.
(해설: http://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/)
코드
https://github.com/kswim/Algorithm/blob/master/etc/17678.cpp
'Algorithm' 카테고리의 다른 글
[프로그래머스][카카오] 프렌즈4블록 (0) | 2018.12.23 |
---|---|
[프로그래머스][카카오] 압축 (0) | 2018.12.22 |
[프로그래머스][카카오] 캐시 (0) | 2018.12.17 |
[프로그래머스][문자열처리] 다트게임 (0) | 2018.12.17 |
[백준][BFS] 1039번 교환 (0) | 2018.11.30 |