어흥
[프로그래머스] 셔틀 버스 (C++) 본문
728x90
반응형
문제 링크: programmers.co.kr/learn/courses/30/lessons/17678
1. 주의할 점
- 문자열 처리를 통해 각 시간을 어떻게 저장할 것인지 정한다
2. 구현
- Arr[10] 벡터를 생성하여 셔틀의 수용인원만큼 수를 각 셔틀에 저장한다(최대 셔틀이 10개라고 적혀있다)
- 각 시간을 분으로 환산하여 V 벡터에 저장한 이후, 오름차순으로 정렬한 이후, Queue에 수를 순차적으로 넣는다
- For문을 통해 셔틀의 수만큼 반복하며 Queue가 비거나, 1개의 셔틀에 탈 수 있는 인원수 만큼 다 채웠다면 While문을 빠져나오도록 While문을 생성하여 각 셔틀에 크루가 도착하는 시간을 넣는다. 추가적으로, 크루가 셔틀보다 늦게 도착했다면 While문을 탈출한다
- 콘이 마지막 셔틀에 탈 수 있는 경우, 마지막 셔틀의 도착시간으로 설정한다. 마지막 셔틀에 탈 수 없는 경우, 마지막 셔틀에서 가장 늦게 탄 인원보다 1분 빨리 도착하게 한다(같은 시간이면 크루가 먼저 타기 때문)
#include <string>
#include <vector>
#include <iostream>
#include <sstream>
#include <queue>
#include <algorithm>
using namespace std;
vector<int> arr[10];
string solution(int n, int t, int m, vector<string> timetable) {
string answer = "";
int cnt;
vector<int> v;
for(int i=0;i<timetable.size();i++){
string str,str1;
istringstream ss(timetable[i]);
while(getline(ss,str,',')){
istringstream iss(str);
int num=0,val;
cnt=0;
while(getline(iss,str1,':')){
val = atoi(str1.c_str());
if(cnt==0) num = val*60;
else num+=val;
cnt++;
}
v.push_back(num);
}
}
queue<int> q;
sort(v.begin(),v.end());
for(int i=0;i<v.size();i++)
q.push(v[i]);
int ctime = 9*60,result;
for(int i=0;i<n;i++){
cnt=0;
while(!q.empty() && cnt<m){
int ct = q.front(); //크루 도착 시간
if(ct>ctime) break; //셔틀보다 늦게 오는 경우
else{
arr[i].push_back(ct);
q.pop();
cnt++;
}
}
ctime+=t;
}
if(arr[n-1].size()<m) //마지막 셔틀 도착시간에 도착하면 될 때
result = ctime-t;
else
result = arr[n-1][m-1]-1;
int hour = result/60;
int min = result%60;
if(hour<10) answer = "0"+to_string(hour);
else answer = to_string(hour);
answer+=":";
if(min<10) answer += "0"+to_string(min);
else answer += to_string(min);
return answer;
}
728x90
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 튜플 (C++) (0) | 2021.03.17 |
---|---|
[프로그래머스] 호텔 방 배정 (C++) (2) | 2021.03.16 |
[프로그래머스] 단어 변환 (C++) (0) | 2020.06.03 |
[프로그래머스] 네트워크 (C++) (0) | 2020.06.03 |
[프로그래머스] 입국심사 (C++) (0) | 2020.06.03 |
Comments