Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 원판 돌리기
- 버킷 정렬
- 1764
- 구현
- 백준 17471
- qorwns
- 백준 1406
- 백준 17779
- 시간 복잡도
- 해시구현
- 5397
- 스택의 특징
- Stack 이란
- 별 찍기 10
- ㅣ풀이
- AVL 시간 복잡도
- 풀이
- 게리멘더링2
- 백준 17822
- 백준 2447
- heap
- 조세퍼스 순열
- 백준 1158
- 백준
- C/C++ 구현
- 백준 5397
- 자료구조
- 해시 구현
- c#
- dfs
Archives
- Today
- Total
홍시홍의 프로그래밍
[2017 카카오 코딩테스트] 셔틀 버스 본문
분류
시뮬레이션
요구사항
1. 크루의 도착 시간 분으로 변환하기
2. 마지막 버스까지 사람 태우기
3. 마지막 버스에서 한 사람 자리 비우고 다 태우기
4. 마지막 사람(정답) 처리하기
풀이
1. 크루의 도착 시간 분으로 변환하기
-> 정해진 문자열이 주어지므로, 시간을 분으로 전환해서 도착시간을 구한다. 구하고 나서 우선순위 큐에 넣는다
2. 마지막 버스이전까지 버스에 사람 태우기
-> 마지막 버스 이전까지 버스 도착 시간 이전에 온 사람들을 태운다
3. 마지막 버스에서 한 사람 자리 비우고 다 태우기
-> 마지막 버스에서 마지막 한자리 빼고 사람을 다 태운다.
4. 마지막 사람(정답) 처리하기
-> 마지막 사람은 버스의 도착 시간이거나, 마지막 한자리보다 1분 빨리온 시간이다
아래 블로그를 참조하였다.
https://kswims.tistory.com/163
#include <string>
#include <vector>
#include <iostream>
#include <queue>
#include <string.h>
#include <algorithm>
#include <deque>
#include <map>
#include <string>
#include <vector>
using namespace std;
int Arrive_time[1500]={0,};
string solution(int n, int t, int m, vector<string> timetable) {
string answer = "";
// [08:00, 08:01, 08:02, 08:03]
priority_queue<int,vector<int>, greater<int> > q;
//도착한 사람 시간 count해준다
for(int i=0 ; i <timetable.size(); i++){
int H_time = stoi(timetable[i].substr(0,2));
int M_time = stoi(timetable[i].substr(3,5));
int Now_time = H_time*60 + M_time;
cout<<Now_time<<endl;
q.push(Now_time);
}
//마지막 버스가 될 때까지 확인한다
for(int i=0 ; i <n-1 ; i++){
int Now_people_cnt=0;
int Now_bus_start_time= 540 + t*i;
while(!q.empty() && Now_people_cnt<m){
if(q.top() > Now_bus_start_time)
break;
else{
q.pop();
Now_people_cnt++;
}
}
}
//마지막처리
int Last_bus_start_time=540 + t*(n-1);
int Last_people_cnt=0;
while(!q.empty() && Last_people_cnt<m-1){
if(q.top() > Last_bus_start_time)
break;
else{
q.pop();
Last_people_cnt++;
}
}
//더 태울사람이 있다?
int ans=0;
if(q.empty() || q.top() > Last_bus_start_time){
ans=Last_bus_start_time;
}
else{
ans=q.top()-1;
}
int H = ans/60;
int M = ans%60;
answer += H/10 + '0';
answer += H%10 + '0';
answer += ':';
answer += M/10 + '0';
answer += M%10 + '0';
cout<<answer<<endl;
return answer;
}
int main(){
int n, t, m;
vector<string> timetable;
n=1;
t=1;
m=5;
timetable.push_back("08:00");
timetable.push_back("08:01");
timetable.push_back("08:02");
timetable.push_back("08:03");
solution(1,1,5,timetable);
}
'알고리즘 문제풀이 > 카카오' 카테고리의 다른 글
[2020 카카오 공채] 괄호 변환 (0) | 2020.08.08 |
---|---|
[2020 카카오 공채] 문자열 압축 (0) | 2020.08.05 |
[2017 카카오 코딩테스트] 프렌즈4블록 (0) | 2020.08.04 |
[2017 카카오 코딩테스트] 뉴스 클러스터링 (0) | 2020.08.04 |
[2017 카카오 코딩테스트] 비밀 지도 (0) | 2020.07.24 |
Comments