티스토리 뷰
입출력 예제
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; }
'알고리즘 > 프로그래머스(C++)' 카테고리의 다른 글
[프로그래머스/알고리즘] N으로 표현 (0) | 2019.02.12 |
---|---|
[프로그래머스/알고리즘] 셔틀버스 (0) | 2019.02.11 |
[프로그래머스/알고리즘] 뉴스 클러스터링 (0) | 2019.02.11 |
[프로그래머스/알고리즘] 프렌즈4블록 (0) | 2019.02.07 |
[프로그래머스/알고리즘] 다트 게임 (0) | 2019.02.07 |