할머니의 콤퓨타 도전기
Programmers: 추석 트래픽 본문
programmers.co.kr/learn/courses/30/lessons/17676
풀이 과정
- string 으로 표현된 시간을 int로 다 바꾸어 주었다. 이때 소수점을 처리하기 위해 ms 단위로 바꾸었다.
- 요청량이 변하는 순간은 각 로그의 시작과 끝뿐이다.
- 또한 lines 배열은 응답완료시간 S를 기준으로 오름차순 정렬되어 있다.
- 따라서 현재 로그의 완료 시간 + 1000(ms)보다 시작 시간이 이전이면 해당 구간에 포함되는 로그임으로 count를 하나씩 증가시켜준다.
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int solution(vector<string> lines) {
int answer = 0;
vector<int> starts;
vector<int> ends;
// ms 단위로 다 바꿈
for(int i = 0; i < lines.size(); i++){
lines[i].pop_back();
int h = stoi(lines[i].substr(11,2)) * 3600 * 1000;
int m = stoi(lines[i].substr(14,2)) * 60 * 1000;
int s = stod(lines[i].substr(17,6)) * 1000;
int process = stod(lines[i].substr(24,5)) * 1000;
starts.push_back(h + m + s - process + 1);
ends.push_back(h + m + s);
}
for(int i = 0; i < lines.size(); i++){
int e = ends[i] + 1000;
int cnt = 0;
for(int j = i; j < lines.size(); j++){
if(e > starts[j])
++cnt;
}
answer = max(answer, cnt);
}
return answer;
}
그런데 로그의 시작과 끝 지점 모두 체크를 해줘야하는게 아닌가라는 의문이 들었다. (위 코드는 끝 지점에서만 검사함)
응답완료시간을 기준으로 오른차순 정렬되어있기에 끝 지점만 체크해도 괜찮을 것이라 생각했는데, 혹시 틀렸다면 댓글 부탁드려용
'Algorithm > Problem Solving' 카테고리의 다른 글
Javascript로 프로그래머스 해시 문제 풀기 (0) | 2021.06.22 |
---|---|
Programmers: 신규 아이디 추천 (0) | 2021.04.29 |
Programmers: 크레인 인형뽑기 게임 (0) | 2021.04.27 |
Programmers: 모의고사 (0) | 2020.08.18 |
BOJ 11657 타임머신 (0) | 2020.08.17 |
Comments