짱아의 개발 기록장

프로그래머스. 추석 트래픽(c++) / String 본문

Algorithm/Programmers

프로그래머스. 추석 트래픽(c++) / String

jungahshin 2021. 3. 2. 10:40
반응형

문자열 처리 그 자체인 문제..!!

일단, 이렇게 시분초밀리초로 나누어져 있는 문제는 무조건! 밀리초 기준으로 변환해주고 작업하는 것이 편하다는 것을 알고있어야 한다.

그래서 문자열 파싱을 한 후에 밀리초 단위로 모두 변환해서 요청 시작 시간과 끝시간을 구해주었다.

 

중요한 점은!

초당 최대 처리량은 요청의 응답 완료 여부에 관계없이 임의 시간부터 1초(=1,000밀리초)간 처리하는 요청의 최대 개수를 의미한다.

라고 문제에 나와있기 때문에

시작 시간과 끝시간 안에서만 요청이 유효한 것이 아니라

시작시간-999 ~ 끝시간 까지가 유효한 범위라는 것을 캐치하는 것이 중요하다.

왜냐하면, 말 그대로 1000밀리초 간에 처리하는 요청의 최대 개수를 구하는 것이기 때문에 어느 부분이던간에 1000밀리초의 범위에 조금이라도 포함이된다면 유효하다고 할 수 있기 때문이다.

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <string>
#include <vector>
#include <iostream>
 
using namespace std;
 
int check[86400010= {0, }; // 24시간을 초단위로
 
int solution(vector<string> lines) {
    int answer = 0;
    
    // 파싱
    for(int i=0; i<lines.size(); i++){
        string s = lines[i];
        int hour = stoi(s.substr(112));
        int min = stoi(s.substr(142));
        int sec = stoi(s.substr(172));
        int msec = stoi(s.substr(203));
            
        int term = stoi(s.substr(241))*1000;
        int Temp = 100;
        for(int j=26; j<s.size(); j++){
            if(s[j]=='s'break;
            term += ((s[j]-'0')*Temp);
            Temp /= 10;
        }
        
        int End = hour*3600000+min*60000+sec*1000+msec;
        int Start = (End-term+1)-999// 999전부터 유효하다...!
        if(End>86400000){
            End = 86400000;
        }
        if(Start<0){
            Start = 0;
        }
        
        for(int j=Start; j<=End; j++){
            check[j]++;
        }
    }
    
    for(int i=0; i<=86400000; i++){
        answer = max(answer, check[i]);
    }
    
    return answer;
}
cs
반응형
Comments