알고리즘 문제/[프로그래머스]

[프로그래머스] 셔틀 버스

latter2005 2021. 4. 10. 17:30

2018 카카오 채용 코딩 테스트 문제입니다.

 

코딩테스트 연습 - [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

문제 확인

 

구현 문제입니다.

 

풀이

 

문제에서 가장 중요한 요소는 마지막 버스에 자리의 여부입니다.

  • 마지막 버스에 자리가 남는 경우 : 마지막 버스의 도착 시간에 탑승하면 됩니다.
  • 마지막 버스에 자리가 없는 경우 : 기다리는 사람들 중 m 번째 사람보다 1분 전에 도착하면 됩니다.

timetable을 읽으면서 마지막 버스 직전까지 기다리는 사람을 구해두고 마지막 버스에서 기다리는 사람에 따라 결과를 내면 됩니다.

 

코드

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
32
33
34
35
36
37
38
39
40
41
42
43
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
 
int time_to_int(string &t) {
    return (t[0- '0'* 600 + (t[1- '0'* 60 + (t[3- '0'* 10 + (t[4- '0');
}
string int_to_time(int t) {
    char tmp[6];
    sprintf(tmp, "%02d:%02d", t / 60, t % 60);
    return string(tmp);
}
string solution(int n, int t, int m, vector<string> timetable) {
    string answer = "";
 
    int ary[2000], size = timetable.size();
    for (int i = 0; i < size; i++)
        ary[i] = time_to_int(timetable[i]);
    sort(ary, ary + size);
 
    //현재 시각, 기다리는 사람, ary index
    int cur_time = 9 * 60, wait = 0, i = 0;
 
    for (;n > 1; cur_time += t) {//마지막 버스 이전까지
        for (; i < size && ary[i] <= cur_time; ++wait, ++i);
        
        wait = wait > m ? wait - m : 0;//최대 m명까지 탑승
        n--;
    }
    for (; i < size && ary[i] <= cur_time; ++wait, ++i);//마지막 버스에서 기다리는 사람 계산
 
    if (wait < m)
        return int_to_time(cur_time);//자리가 있으면 버스 도착 시간에 탑승
 
 
    return int_to_time(ary[i - (wait - m) - 1]-1);//자리가 없으면 기다리는 사람 중 (m 번째 사람이 온 시간 - 1)분에 탑승
}
 
int main() {
    vector<string> time = { "09:00","09:00","09:01","09:01" };
    solution(322, time);
}
cs

정확성 테스트

테스트 1 통과 (0.02ms, 3.77MB)
테스트 2 통과 (0.02ms, 3.78MB)
테스트 3 통과 (0.02ms, 3.96MB)
테스트 4 통과 (0.02ms, 3.98MB)
테스트 5 통과 (0.02ms, 3.77MB)
테스트 6 통과 (0.02ms, 3.95MB)
테스트 7 통과 (0.04ms, 3.8MB)
테스트 8 통과 (0.02ms, 3.95MB)
테스트 9 통과 (0.02ms, 3.95MB)
테스트 10 통과 (0.02ms, 3.89MB)
테스트 11 통과 (0.02ms, 3.94MB)
테스트 12 통과 (0.03ms, 3.94MB)
테스트 13 통과 (0.03ms, 3.93MB)
테스트 14 통과 (0.02ms, 3.91MB)
테스트 15 통과 (0.02ms, 3.95MB)
테스트 16 통과 (0.02ms, 3.76MB)
테스트 17 통과 (0.04ms, 3.96MB)
테스트 18 통과 (0.03ms, 3.79MB)
테스트 19 통과 (0.03ms, 3.93MB)
테스트 20 통과 (0.03ms, 3.95MB)
테스트 21 통과 (0.03ms, 3.86MB)
테스트 22 통과 (0.12ms, 3.9MB)
테스트 23 통과 (0.11ms, 3.9MB)
테스트 24 통과 (0.04ms, 3.95MB)

채점 결과

정확성: 100.0

합계: 100.0 / 100.0

반응형