https://school.programmers.co.kr/learn/courses/30/lessons/176962
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
시간을 시, 분 단위로 비교를 할까하다가 분 단위로 통일해서 비교를 진행했다.
과제를 끝내고 남은 시간이 있다면, 바로바로 남은 과제 중에서 해결가능한 게 있는 지 찾는 과정이 꼭 필요한데, 문제가 길어서 이 조건을 놓쳐서 조금 헤맸었다.
최종 코드
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
stack<pair<string, int>> stopAssignment;
int timeToMinute(string time) {
int hour = stoi(time.substr(0, 2));
int minute = stoi(time.substr(3, 2));
return hour * 60 + minute;
}
bool compare(const vector<string> &a, const vector<string> &b) {
return timeToMinute(a[1]) < timeToMinute(b[1]);
}
vector<string> solution(vector<vector<string>> plans) {
vector<string> answer;
sort(plans.begin(), plans.end(), compare);
// 마지막 과제 전까지 처리
for (int i=0;i<plans.size()-1;i++) {
string cur = plans[i][0];
int curStart = timeToMinute(plans[i][1]);
int playTime = stoi(plans[i][2]);
int nextStart = timeToMinute(plans[i+1][1]);
int endTime = curStart + playTime;
if (endTime <= nextStart) {
answer.push_back(cur);
int remainTime = nextStart - endTime;
while (!stopAssignment.empty() && remainTime > 0) {
pair<string, int> p = stopAssignment.top();
stopAssignment.pop();
if (p.second <= remainTime) {
answer.push_back(p.first);
remainTime -= p.second;
} else {
stopAssignment.push(make_pair(p.first, p.second - remainTime));
break;
}
}
} else {
int remainTime = endTime - nextStart;
stopAssignment.push(make_pair(cur, remainTime));
}
}
answer.push_back(plans[plans.size() - 1][0]);
while (!stopAssignment.empty()) {
answer.push_back(stopAssignment.top().first);
stopAssignment.pop();
}
return answer;
}
정리
- 시, 분 단위 일일히 비교를 하려다가 분 단위로 모두 단위를 바꿔서 진행했더니 훨씬 수월했다.
- stoi, substr을 오랜만에 써봤는데, 처음 plans[i][1][0] + ... 이렇게 다루다가 이걸 쓰니까 훨씬 수월했다.
반응형
'PS' 카테고리의 다른 글
| [프로그래머스 Lv.2] 광물 캐기 (0) | 2025.12.18 |
|---|---|
| [프로그래머스 Lv.2] 두 원 사이의 정수 쌍 (0) | 2025.12.16 |
| [프로그래머스 Lv.2] 연속된 부분 수열의 합 (0) | 2025.12.14 |
| [프로그래머스 Lv.2] 석유 시추 (0) | 2025.12.13 |
| [프로그래머스 Lv.2] 도넛과 막대 그래프 (0) | 2025.12.12 |