아무코딩

[2018 KAKAO BLIND RECRUITMENT 1차] 셔틀버스 본문

알고리즘/프로그래머스

[2018 KAKAO BLIND RECRUITMENT 1차] 셔틀버스

동 코 2020. 5. 4. 15:44

문제풀이

다음과 같은 순서로 풀면 된다. 

1. 크루들을 버스에 배치시킨다.

2. 마지막 버스의 만석여부를 확인한다.

3. 만석이 아닐시 해당 버스의 시간을 반환

4. 만석일시 만석의 맨마지막으로 들어온 크루의 시간보다 조금 빠르게 (-1) 해주면 된다.

 

소스코드

더보기
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
 
class Time{
private:
    int hour;
    int min;
    int m_time;
public:
    Time(string time){
        hour=stoi(time.substr(0,2));
        min = stoi(time.substr(3,2));
        m_time = 60*hour+min;
    }
    
    int getMinuate(){
        return m_time;
    }
    
    bool operator<(Time t)const{
        return this->m_time < t.m_time;
    }
};
typedef struct Bus{
    int time;
    vector<Time> crews;
}Bus;
 
string getTime(int t) {
    int hour = t / 60;
    int min = t % 60;
    string h, m;
    if (hour < 10)
        h = "0" + to_string(hour);
    else
        h = to_string(hour);
    if (min < 10)
        m = "0" + to_string(min);
    else
        m = to_string(min);
 
    return h + ":" + m;
}
 
vector<Bus> bus;
 
vector<Time> crew_infos;
 
string solution(int n, int t, int m, vector<string> timetable) {
    string answer = "";
    
    for(int i=0;i<timetable.size();i++){
        crew_infos.push_back(timetable[i]);
    }
    sort(crew_infos.begin(),crew_infos.end());
    
    int bus_time=540;
    
    for(int i=0;i<n;i++){
        Bus temp;
        temp.time = bus_time;
        bus.push_back(temp);
        bus_time = bus_time + t;
    }
    
    for(int i=0;i<crew_infos.size();i++){
        for(int j=0;j<bus.size();j++){
            if(crew_infos[i].getMinuate()<=bus[j].time && bus[j].crews.size()<m){
                bus[j].crews.push_back(crew_infos[i]);
                break;
            }
        }
    }
    
    if(bus[bus.size()-1].crews.size()<m){
        answer = getTime(bus[bus.size()-1].time);
    }
    else{
        int last_crew_idx = bus[bus.size()-1].crews.size()-1;
        answer = getTime(bus[bus.size()-1].crews[last_crew_idx].getMinuate()-1);
    }
    
    return answer;
}
 
 

문제링크 : https://programmers.co.kr/learn/courses/30/lessons/17678

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

Comments