https://school.programmers.co.kr/learn/courses/30/lessons/176962
[소스 코드]
//23.06.22
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(vector<string> a, vector<string> b)
{
return a[1] < b[1];
}
vector<string> solution(vector<vector<string>> plans) {
vector<string> answer;
vector<pair<string,int>> waitTesk;
sort(plans.begin(), plans.end(), compare);;
int time=0;
for(vector<string> v : plans){
int newTime= 60*stoi(v[1].substr(0,2)) + stoi(v[1].substr(3,5));
while( time < newTime ) {
if(waitTesk.size() > 0 ){
waitTesk.back().second--;
if(waitTesk.back().second==0){
answer.push_back(waitTesk.back().first);
waitTesk.pop_back();
}
}
time++;
}
waitTesk.push_back(make_pair(v[0],stoi(v[2])));
}
while(waitTesk.size()>0){
answer.push_back(waitTesk.back().first);
waitTesk.pop_back();
}
return answer;
}
문제를 풀면서 공부했던 점은 크게 2가지입니다.
1. compare() 함수를 만들어서 vector를 원하는 기준으로 배열하게 하기.
2. pair<자료형, 자료형>를 이용하여 문자열과 정수 함께 저장하기.
문제 풀이 과정은 다음과 같습니다.
1. sort()함수를 이용해 입력받은 과제를 시작 시간순으로 정렬
2. 비교가 쉽도록, 시간을 정수로 변환 (60*시간+분)
3. 이전에 입력받은 시간에서 새로 시작해야 하는 과제의 시작시간까지 1분씩 더해가면서, 진행중인 과제 진행
( 이 과정에서, 진행중인 과제가 끝나면 다음 과제 (=잠시 멈춘 과제) 불러와 실행)
4. 새로 시작해야 하는 과제의 시작시간이 되면, 새로 시작해야 하는 과제를 진행 중인 과제 배열에 추가
( 과제이름(문자열) - playtime(정수) 형태로 추가)
'학습 정리 > 👨💻 PS Study' 카테고리의 다른 글
[Python] 타일 채우기 (백준 2133번) (0) | 2024.06.10 |
---|---|
[C++] 프로그래머스 - 크기가 작은 부분 문자열 (0) | 2023.06.23 |
[C++] 프로그래머스 - 연속된 부분 수열의 합 (0) | 2023.06.21 |
[C++] 프로그래머스 - 두 원 사이의 정수 쌍 (0) | 2023.06.18 |
[C++] 프로그래머스 - 공원 산책 (0) | 2023.06.12 |