https://programmers.co.kr/learn/courses/30/lessons/17676
코딩테스트 연습 - [1차] 추석 트래픽
입력: [ "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-1
programmers.co.kr
예제 1과 2의 차이를 명확하게 인지
** 처리시간은 시작시간과 끝 시간을 '포함'하므로
2016-09-15 01:00:04.002 2.0s
1:00:02.003 부터 1:00:04.002 까지
!! 1:00:02.002 부터가 아님! 끝난 시간에서 처리 시간을 빼고 0.001ms를 더해줘야 시작시간이 됨 !!
(h + m + s + ms - duration + 1)
이것만 알면 나머진 간단
2중 포문을 통해 시작 시간과 끝 시간을 비교하면서 끝 시간이 시작 시간보다 넘는다면, 즉, 겹친다면
해당 시간에 처리되는 프로세스의 개수를 1 증가
그렇게 나온 값들 중 가장 큰 값을 answer에 넣고 출력 (max함수)
int solution(vector<string> lines) {
int answer = 0;
vector<string> temp = lines;
vector<int> start;
vector<int> end;
for (int i = 0; i < temp.size();i++) {
int h, m, s, ms;
float duration;
temp[i].pop_back();
h = stoi(lines[i].substr(11, 2)) * 3600 * 1000;
m = stoi(lines[i].substr(14, 2)) * 60 * 1000;
s = stoi(lines[i].substr(17, 2)) * 1000;
ms = stoi(lines[i].substr(20, 3));
duration = stof(lines[i].substr(24, 5)) * 1000;
start.push_back(h + m + s + ms - duration + 1);
end.push_back(h + m + s + ms);
}
for (int i = 0; i < lines.size();i++) {
int end_t = end[i] + 1000;
int cnt = 1;
for (int j = i + 1; j < lines.size();j++) {
int current_t = start[j];
if (end_t > current_t) {
cnt++;
}
}
answer = max(answer, cnt);
}
return answer;
}
'코딩테스트 > 문제풀이' 카테고리의 다른 글
[프로그래머스] 키패드 누르기 C++ (0) | 2022.05.03 |
---|---|
[프로그래머스] 숫자 문자열과 영단어 C++ (0) | 2022.05.02 |
[프로그래머스] 오픈채팅방 C++ (0) | 2022.05.02 |
[프로그래머스] 문자열 압축 C++ (0) | 2022.04.28 |
[프로그래머스] 신규 아이디 추천 C++ (0) | 2022.04.28 |