본문 바로가기

Algorithm

2018 KAKAO BLIND RECRUITMENT[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분 일찍 오면 됨.

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

string solution(int n, int t, int m, vector<string> timetable) {
    vector<int> vec;
    string answer = "";
    for(int i = 0; i < timetable.size(); i++)
    {
        int time = 60 * (10 * (timetable[i][0] - '0') + (timetable[i][1] - '0'));
        time += 10 * (timetable[i][3] - '0') + (timetable[i][4] - '0');
        vec.push_back(time);
    }
    
    sort(vec.begin(),vec.end());
    
    int bus = 540;
    int leave = 0;
    for(int i = 0; i < n; i++)
    {
        //cout << to_string(bus / 60) << " : " <<to_string(bus  % 60) <<endl;
        int human = 0;
        int last = 0;
        for(int j = 0; j < vec.size(); j++)
        {
            if(bus >= vec[j] && vec[j] != -1)
            {
                if(human < m)
                {
                    last = vec[j];
                     vec[j] = -1;
                     human++;
                     leave++;
                    
                }
            }
        }
        
        if(i == n - 1)
        {
            //cout << "막차 " << leave << "/" << vec.size() << endl;
            if(human <  m)
            {
                string hstr = to_string(bus/60);
                string mstr = to_string(bus%60);
                
                if(bus / 60 < 10)
                {
                    hstr = '0' + to_string(bus/60);
                }
                if(bus % 60 < 10)
                {
                    mstr = '0' + to_string(bus%60);
                }
                answer += hstr;
                answer += ":";
                answer += mstr;
                //cout << "자리 있음" << endl;
            }
            else
            {
                string hstr = to_string((last - 1)/60);
                string mstr = to_string((last - 1)%60);
                
                if(((last-1) / 60) < 10)
                {
                    hstr = '0' + to_string((last-1)/60);
                }
                if(((last -1) % 60) < 10)
                {
                    mstr = '0' + to_string((last-1)%60);
                }
                answer += hstr;
                answer += ":";
                answer += mstr;
                //cout << "자리 없음" << endl;
            }
        }
        
        bus += t;
    }
    //cout << answer << endl;
    
    return answer;
}
반응형