[프로그래머스] [1차] 추석트래픽
업데이트:
카카오 블라인드 코딩테스트 기출 추석트래픽 문제입니다.
이 문제는 문자열이 들어오면 파싱을 어떻게 할 것인지를 정하는 것이 중요하다. 나는 들어오는 시간을 전부 ms로 변환해서 계산하였다.
이후 우선순위큐로 프로세스 시작과 끝나는 시간을 관리한 뒤 슬라이딩 윈도우, 투포인터 개념을 활용하여 결과를 냈습니다.
ms로 바꾸는 방법이 실제 시험때 생각났으면 좋았을 테지만.. 그래도 이 문제를 교훈으로 이러한 시간이 들어오는 문제는 단위를 맞춰주면 된다 라는 것이 습득되었습니다.
코드는 알고리즘 여기에도 업로드 되있습니다!
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int solution(vector<string> lines) {
int answer = 0;
int Hour, Minute, Second, Micro, Process,end;
priority_queue<int, vector<int>, greater<int>> start_process, end_process;
for (int i = 0; i < lines.size(); i++) {
Hour = atoi(lines[i].substr(11, 2).c_str());
Minute = atoi(lines[i].substr(14, 2).c_str());
Second = atoi(lines[i].substr(17, 2).c_str());
Micro = atoi(lines[i].substr(20, 3).c_str());
end = 3600 * 1000 * Hour + 60 * 1000 * Minute + 1000 * Second + Micro;
Process = 1000*atof(lines[i].substr(24, lines[i].length() - 25).c_str());
start_process.push(end - Process + 1);
end_process.push(end);
}
int start_time, end_time;
int Count = 0;
end_time = end_process.top();
start_process.pop();
Count++;
answer = max(answer, Count);
start_time = end_time - 999;
while (end_time != end + 1) {
while (!start_process.empty() && start_process.top() <= end_time) {
start_process.pop();
Count++;
}
answer = max(answer, Count);
while (!end_process.empty() && end_process.top() <= start_time) {
end_process.pop();
Count--;
}
start_time++;
end_time++;
}
return answer;
}
소스코드
이 외에도 제가 푼 문제들 소스코드는 다음 링크에 있습니다!!! 알고리즘 문제풀이
댓글남기기