티스토리 뷰

추석 트래픽


입출력 예제


lines: [ 2016-09-15 20:59:57.421 0.351s, 2016-09-15 20:59:58.233 1.181s, 2016-09-15 20:59:58.299 0.8s, 2016-09-15 20:59:58.688 1.041s, 2016-09-15 20:59:59.591 1.412s, 2016-09-15 21:00:00.464 1.466s, 2016-09-15 21:00:00.741 1.581s, 2016-09-15 21:00:00.748 2.31s, 2016-09-15 21:00:00.966 0.381s, 2016-09-15 21:00:02.066 2.62s ] 


return : 7



문제 해결


수많은 에러때문에 무식하게 풀어버렸네요. 2016년 9월 15일 필요없고 시, 분, 초는 위치가 동일하기 때문에 해당 위치의 인덱스 접근을 통해 따로 뽑아내고 정수화한다.(마이크로때문에 소수점을 1000을 곱함으로써 제거) 처리 시간은 초는 상관없는데 micro는 3번을 불러서 s가 있거나 아무것도 없을경우 0으로 해서 소수점을 없애주었다.


그리고 시작시간과 끝시간을 우선순위큐를 이용해서 정렬해주고 첫번째 값을 1초 경계선을 만들고 0.001씩 증가하면서 일일이 확인했습니다. (다시 고민한건데 시작시간과 끝시간의 값만 비교해도 상관없을 듯 하네요)


소스 코드

#include <vector>
#include <queue>
#include <functional>
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;

int solution(vector<string> lines) {
	int answer = 0;
	int count = 0;
	string hour, minute, second, micro, process_time;
	int end_bar,start_bar;
	priority_queue<int, vector<int>, greater<int>> start_process,end_process;
	int value1,value2;
	for (int i = 0; i < lines.size(); i++) {
		process_time = "";
		hour.assign(lines[i], 11, 2);
		minute.assign(lines[i], 14, 2);
		second.assign(lines[i], 17, 2);
		micro.assign(lines[i], 20, 3);
		int j;
		for (j = 24; j < lines[i].size(); j++) {
			if (lines[i][j] == '.') {
				j++;
				break;
			}
			if (lines[i][j] == 's') {
				process_time += "000";
				j++;
				break;
			}
			process_time += lines[i][j];
		}
		if (j != lines[i].size()) {
			int k = 0;
			for (int k = 0; k < 3; k++) {
				if (lines[i][j] == 's') {
					process_time += "0";
				}
				else {
					process_time += lines[i][j++];
				}
			}
		}

		value1 = 60 * 60 * stoi(hour) * 1000 + 60 * stoi(minute) * 1000 + stoi(second) * 1000 + stoi(micro);
		value2 = stoi(process_time);
		start_process.push(value1 - value2 + 1);
		
		end_process.push(value1);
	}

	end_bar = end_process.top();
	start_process.pop();
	count++;
	answer = max(answer, count);
	start_bar = end_bar - 999;

	while (end_bar!=value1+1) {
		while (!start_process.empty() && start_process.top() <= end_bar) {
			start_process.pop();
			count++;
			
		}
		answer = max(answer, count);

		while (!end_process.empty()&&end_process.top() <=start_bar) {
			end_process.pop();
			count--;
		}
		start_bar++;
		end_bar++;

	}
	
	return answer;
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함