[프로그래머스] 추석 트래픽

GomHyeok·2022년 6월 10일
0

📒활용개념

string 함수 사용, 문자열 사용법 등 문자열을 잘 다룰 수 있어야한다.

📌문제설명

이번 추석에도 시스템 장애가 없는 명절을 보내고 싶은 어피치는 서버를 증설해야 할지 고민이다. 장애 대비용 서버 증설 여부를 결정하기 위해 작년 추석 기간인 9월 15일 로그 데이터를 분석한 후 초당 최대 처리량을 계산해보기로 했다. 초당 최대 처리량은 요청의 응답 완료 여부에 관계없이 임의 시간부터 1초(=1,000밀리초)간 처리하는 요청의 최대 개수를 의미한다.

입력형식

  • solution 함수에 전달되는 lines 배열은 N(1 ≦ N ≦ 2,000)개의 로그 문자열로 되어 있으며, 각 로그 문자열마다 요청에 대한 응답완료시간 S와 처리시간 T가 공백으로 구분되어 있다.
  • 응답완료시간 S는 작년 추석인 2016년 9월 15일만 포함하여 고정 길이 2016-09-15 hh:mm:ss.sss 형식으로 되어 있다.
  • 처리시간 T는 0.1s, 0.312s, 2s 와 같이 최대 소수점 셋째 자리까지 기록하며 뒤에는 초 단위를 의미하는 s로 끝난다.
  • 서버에는 타임아웃이 3초로 적용되어 있기 때문에 처리시간은 0.001 ≦ T ≦ 3.000이다.
    lines 배열은 응답완료시간 S를 기준으로 오름차순 정렬되어 있다.

출력형식
solution 함수에서는 로그 데이터 lines 배열에 대해 초당 최대 처리량을 리턴한다.

📌구현

#include <string>
#include <vector>

using namespace std;

int solution(vector<string> lines) {
    int answer = 0;
    vector<int> start_t, end_t;
    
    //각 시간을 ms단위로 저장
    for(int i = 0; i < lines.size(); i++)
    {
        string h, m, s, ms;
        int ih, im, is, process;
        
        lines[i].pop_back();
        h = lines[i].substr(11, 2);
        m = lines[i].substr(14, 2);
        s = lines[i].substr(17, 2);
        ms = lines[i].substr(20, 3);
        process = stof(lines[i].substr(24, 5)) * 1000;
        
        ih = stoi(h) * 3600 * 1000;
        im = stoi(m) * 60 * 1000;
        is = stoi(s) * 1000 + stoi(ms);
        
        //시작과 끝 각각 저장
        //시작시간
        start_t.push_back(ih + im + is - process + 1);
        //끝나는 시간
        end_t.push_back(ih + im + is);
    }
    
    for(int i = 0; i < lines.size(); i++)
    {
        //정확한 종료 시간은 +1초
        int end_time = end_t[i] + 1000;
        int count = 0;
        
        for(int j = i; j < lines.size(); j++)
        {
            if(start_t[j] < end_time)
                count++;
        }
        
        if(answer < count)
            answer = count;
    }
    return answer;

}

📌주의점

  • 시간을 하나로 통일해 주는 것이 중요하다.(단위)
  • string을 모두 int형으로 바꿔서 계산 해야한다.
profile
github : https://github.com/GomHyeok/

0개의 댓글

관련 채용 정보