[프로그래머스] [1차] 추석트래픽

업데이트:

카카오 블라인드 코딩테스트 기출 추석트래픽 문제입니다.

[1차] 추석트래픽

1 2

이 문제는 문자열이 들어오면 파싱을 어떻게 할 것인지를 정하는 것이 중요하다. 나는 들어오는 시간을 전부 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;
}

소스코드

이 외에도 제가 푼 문제들 소스코드는 다음 링크에 있습니다!!! 알고리즘 문제풀이

댓글남기기