일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 2018 KAKAO BLIND RECRUITMENT 1차
- bfs
- gradle
- 알고리즘
- gcp
- map
- dfs
- CS 스터디
- 삼성 SW 역량테스트
- 카카오 공채
- 삼성 SW 기출문제
- 2020 KAKAO BLIND RECRUITMENT
- 부스트코스
- 2019 KAKAO BLIND RECRUITMENT
- 비트마스크
- 2018 카카오
- Java
- c++
- 카카오
- set
- 2020 카카오 공채
- 2018 KAKAO BLIND RECRUITMENT
- 2019 카카오 공채
- 백준
- 프로그래머스
- Baekjoon
- 젠킨스
- 자바
- 2019 카카오 개발자 겨울 인턴십 코딩테스트
- 2018 카카오 공채
Archives
- Today
- Total
아무코딩
[2018 KAKAO BLIND RECRUITMENT 1차] 셔틀버스 본문
문제풀이
다음과 같은 순서로 풀면 된다.
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){
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
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[2018 KAKAO BLIND RECRUITMENT 1차] 비밀지도 (0) | 2020.05.06 |
---|---|
[2018 KAKAO BLIND RECRUITMENT 1차] 다트게임 (0) | 2020.05.05 |
[프로그래머스 43236] 징검다리 (0) | 2020.05.02 |
[2018 KAKAO BLIND RECRUITMENT 3차] n진수 게임 (0) | 2020.05.01 |
[2018 KAKAO BLIND RECRUITMENT 3차] 파일명 정렬 (0) | 2020.04.29 |
Comments