[c++] 2018 KAKAO BLIND RECRUITMENT[1μ°¨] μ…”ν‹€λ²„μŠ€

문제

μ…”ν‹€λ²„μŠ€ 문제 λ°”λ‘œκ°€κΈ°

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - [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. 셔틀이 μΆœλ°œν•˜λŠ” μ‹œκ°„μ„ λ‹€ κ΅¬ν•œλ‹€.
  2. μ‚¬λžŒλ“€μ˜ timetable을 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œλ‹€.
  3. 각 셔틀에 νƒˆ 수 μžˆλŠ” μ‚¬λžŒ(μ…”ν‹€ μ‹œκ°„λ³΄λ‹€ μž‘κ±°λ‚˜ 같은 μ‚¬λžŒ)을 κ΅¬ν•œλ‹€.
    1. 이 λ•Œ, 콘이 ν•΄λ‹Ή 셔틀에 νƒˆ 수 있기 μœ„ν•œ μ΅œν›„μ˜ μ‹œκ°„μ„ κ΅¬ν•΄λ†“λŠ”λ‹€.
    2. μ΅œν›„μ˜ μ‹œκ°„μ€ 셔틀에 μ‚¬λžŒμ΄ 꽉 μ°° 경우 'κ°€μž₯ 큰 μ‹œκ°„ - 1'
    3. 셔틀에 μ‚¬λžŒμ΄ 꽉 차지 μ•ŠλŠ”λ‹€λ©΄ 'μ…”ν‹€ 좜발 μ‹œκ°„'이닀.
  4. 각 μ…”ν‹€μ—μ„œμ˜ μ΅œν›„ μ‹œκ°„ 쀑 κ°€μž₯ μ΅œν›„μΈ μ‹œκ°„μ„ κ³ λ₯Έλ‹€.

 

μ½”λ“œ

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

using namespace std;

int getTime(string timeString){
    auto idx = timeString.find(":");
    int hour = stoi(timeString.substr(0, idx));
    int minute = stoi(timeString.substr(idx+1, timeString.size()));
    
    return hour*60 + minute;
}

string getTimeString(int time){
    string hour = to_string(time / 60);
    string minute = to_string(time % 60);
    
    if(hour.size() == 1){
        hour = '0' + hour;
    }
    if(minute.size() == 1){
        minute = '0' + minute;
    }
    
    return hour + ":" + minute;
}

string solution(int n, int t, int m, vector<string> timetable) {
    string answer = "";
    vector<int> shuttleTime;
    
    // 1. 셔틀이 μΆœλ°œν•˜λŠ” μ‹œκ°„μ„ λ‹€ κ΅¬ν•œλ‹€.
    int nowTime = 9*60; // 첫 μ‹œκ°„ μ„ΈνŒ…
    shuttleTime.push_back(nowTime);
    for(int i=0; i<n-1; i++){
        nowTime += t;
        shuttleTime.push_back(nowTime);
    }
    
    // 2. μ‚¬λžŒλ“€μ˜ timetable을 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œλ‹€.
    vector<int> numberTimeTable;
    for(int i=0; i<timetable.size(); i++){
        numberTimeTable.push_back(getTime(timetable[i]));
    }
    sort(numberTimeTable.begin(), numberTimeTable.end());
    
    // 3. 각 셔틀에 νƒˆ 수 μžˆλŠ” μ‚¬λžŒ(μ…”ν‹€ μ‹œκ°„λ³΄λ‹€ μž‘κ±°λ‚˜ 같은 μ‚¬λžŒ)을 κ΅¬ν•œλ‹€.
    // (이 λ•Œ, 콘이 ν•΄λ‹Ή 셔틀에 νƒˆ 수 있기 μœ„ν•œ μ΅œν›„μ˜ μ‹œκ°„μ„ κ΅¬ν•΄λ†“λŠ”λ‹€.)
    // => 이건 'κ°€μž₯ 큰 μ‹œκ°„ - 1λΆ„'μ΄κ±°λ‚˜, 셔틀에 μ‚¬λžŒμ΄ 꽉 차지 μ•ŠλŠ”λ‹€λ©΄ 'μ…”ν‹€ 좜발 μ‹œκ°„'이닀.
    vector<int> cornTime;
    int idx = 0;
    for(int i=0; i<shuttleTime.size(); i++){ // 10
        int shuttle = shuttleTime[i];
        int shuttleWhole = 0;
        int maxTime = 0;
        // *이미 λ²„μŠ€μ— 탄 인원은 μ œμ™Έν•΄μ£Όμ–΄μ•Ό 함
        // *셔틀에 mλͺ… 이상 λͺ» νƒ€κ²Œ ν•΄μ•Ό 함
        for(; idx<numberTimeTable.size() && shuttleWhole != m; idx++){ // 2000
            if(numberTimeTable[idx] <= shuttle){
                shuttleWhole++;
                if(maxTime < numberTimeTable[idx]) maxTime = numberTimeTable[idx];
            }else{
                break;
            }
        }
        if(shuttleWhole < m){ // μ…”ν‹€ 자리 λ‚¨μŒ
            cornTime.push_back(shuttle);
        }else{ // 자리 μ—†μœΌλ©΄ κ°€μž₯ 큰 μ‹œκ°„ - 1
            cornTime.push_back(maxTime-1);
        }
    }
    
    // 4. 각 μ…”ν‹€μ—μ„œμ˜ μ΅œν›„ μ‹œκ°„ 쀑 κ°€μž₯ μ΅œν›„ μ‹œκ°„μ„ κ³ λ₯Έλ‹€.
    sort(cornTime.begin(), cornTime.end());
    answer = getTimeString(cornTime.back());
    
    return answer;
}

 

κ²°κ³Ό

ν…ŒμŠ€νŠΈ 1 〉 톡과 (0.02ms, 4.32MB)
ν…ŒμŠ€νŠΈ 2 〉 톡과 (0.02ms, 4.25MB)
ν…ŒμŠ€νŠΈ 3 〉 톡과 (0.02ms, 4.26MB)
ν…ŒμŠ€νŠΈ 4 〉 톡과 (0.02ms, 3.78MB)
ν…ŒμŠ€νŠΈ 5 〉 톡과 (0.02ms, 3.8MB)
ν…ŒμŠ€νŠΈ 6 〉 톡과 (0.02ms, 4.21MB)
ν…ŒμŠ€νŠΈ 7 〉 톡과 (0.08ms, 4.32MB)
ν…ŒμŠ€νŠΈ 8 〉 톡과 (0.03ms, 4.26MB)
ν…ŒμŠ€νŠΈ 9 〉 톡과 (0.02ms, 4.25MB)
ν…ŒμŠ€νŠΈ 10 〉 톡과 (0.02ms, 4.27MB)
ν…ŒμŠ€νŠΈ 11 〉 톡과 (0.02ms, 4.32MB)
ν…ŒμŠ€νŠΈ 12 〉 톡과 (0.06ms, 4.32MB)
ν…ŒμŠ€νŠΈ 13 〉 톡과 (0.06ms, 4.33MB)
ν…ŒμŠ€νŠΈ 14 〉 톡과 (0.02ms, 4.26MB)
ν…ŒμŠ€νŠΈ 15 〉 톡과 (0.03ms, 3.72MB)
ν…ŒμŠ€νŠΈ 16 〉 톡과 (0.04ms, 4.32MB)
ν…ŒμŠ€νŠΈ 17 〉 톡과 (0.06ms, 4.25MB)
ν…ŒμŠ€νŠΈ 18 〉 톡과 (0.06ms, 4.27MB)
ν…ŒμŠ€νŠΈ 19 〉 톡과 (0.06ms, 4.27MB)
ν…ŒμŠ€νŠΈ 20 〉 톡과 (0.06ms, 4.33MB)
ν…ŒμŠ€νŠΈ 21 〉 톡과 (0.20ms, 4.25MB)
ν…ŒμŠ€νŠΈ 22 〉 톡과 (0.08ms, 3.92MB)
ν…ŒμŠ€νŠΈ 23 〉 톡과 (0.06ms, 4.34MB)
ν…ŒμŠ€νŠΈ 24 〉 톡과 (0.23ms, 3.9MB)

 

 λΆ€μ •ν™•ν•œ 정보가 λ‹΄κ²¨μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€! 

 λŒ“κΈ€λ‘œ μ•Œλ €μ£Όμ„Έμš” :) 

도움이 λ˜μ…¨λ‹€λ©΄ κ΄‘κ³  ν•œ λ²ˆμ”© λˆŒλŸ¬μ£Όμ„Έμš” ❣️

λ°˜μ‘ν˜•