본문 바로가기

Algorithm/Implementation

(C++) - 프로그래머스(2018 KAKAO BLIND) : [1차] 셔틀버스 답

반응형

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

 

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

구현을 통해 적절히 시간계산 하는 문제였습니다.

 

풀이방법

 1. 문자열 정리 : "09:01"식으로 되어있는 timetable배열을 시간계산의 편리성을 위해 새로운 vector <int> timeInt 변수에 계산을 통해 분으로 바꾸고 저장합니다. 그 후 오름차순으로 정렬합니다.

 

 2. 한 번의 버스 운행에 탑승하는 인원 계산 : 0번째 운행 ~ n번째 운행까지(loop) 확인하는데 매 loop마다 해당 운행시간보다 빨리 도착한 인원들을 세줍니다. 수용인원을 넘어가거나 timeInt배열의 size를 넘어가면 가장 안쪽 loop를 탈출합니다.

 

 3. 정답 도출

  3-1. 만약 타는 인원이 m명 미만이면 answer = 막차시간

  3-2. else 면 새치기 해야되므로 answer = 가장 마지막에 도착한 손님 - 1

 

Code

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

vector <int> getIntTime(vector<string> &timetable){
    vector <int> timeInt;
    for(int i = 0; i < timetable.size(); i++){
        int hour = stoi(timetable[i].substr(0,2));
        int minute = stoi(timetable[i].substr(3,2));
        int totalMinute = hour * 60 + minute;
        timeInt.push_back(totalMinute);
    }
    return timeInt;
}

string getTimeString(int time){
    string tmp = "";
    int hour = time / 60;
    int minute = time % 60;
    if(hour < 10) tmp += "0";
    tmp += to_string(hour) + ":" ;
    if(minute < 10) tmp += "0";
    tmp += to_string(minute);
    return tmp;
}

string solution(int n, int t, int m, vector<string> timetable) {
    string answer = "";
    int pivot = 0, cnt =0;
    vector <int> timeInt = getIntTime(timetable);
    sort(timeInt.begin(),timeInt.end());

    for(int busTime = 0; busTime < n * t; busTime += t){
        int shuttleTime = 9 * 60 + busTime;
        for(cnt = 0; pivot + cnt < timeInt.size() && cnt < m; cnt++){ 
            if(timeInt[pivot + cnt] > shuttleTime) break; 
        }
        pivot += cnt; 
    }
    if(cnt < m) answer = getTimeString(9 * 60 + (n-1) * t);
    else answer = getTimeString(timeInt[pivot-1] - 1);
    return answer;
}

int main(){
    vector<string> t = {"09:00", "09:00", "09:00", "09:00"};
    cout << "정답이 뭐에요? " << solution(2,1,2,t);
}