본문 바로가기

프로그래머스/문자열

추석 트래픽

728x90

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-15 21:00:00.748

programmers.co.kr

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;

int solution(vector<string> lines) {
    int answer = 0;
    string date,time,spent;
    vector<double>start;
    vector<double>end;
    map<double,int>m;
    int minspent= 4;
    for(int i=0; i<lines.size();i++){
        string str = lines[i];
        date = str.substr(0,10);
        time = str.substr(11,12);
        spent =  str.substr(24);
        int send = spent.size()-1;
        spent = spent.substr(0,send);
        double totalseconds = 60*60*stod(time.substr(0,2)) + 60*stod(time.substr(3,2))+stod(time.substr(6,2))+stod(time.substr(9))/1000.0;
        double servertime =stod(spent);
        start.push_back(totalseconds-servertime+0.001);
        end.push_back(totalseconds);
    //    if(minspent>servertime){minspent = servertime;}
       
    }
    int t =0;
    for(int i=0; i<start.size(); i++){
        double s = start[i];
        double e = end[i];
        t=1;
        
    
    for(int j= i+1; j<start.size(); j++){
        if(s+1>=start[j]||e+1>start[j]){
            t++;
        }
    }
        answer = max(answer,t);
    }
   
    return answer;
}

<JAVA>

import java.util.*;
class Solution {
    public int solution(String[] lines) {
        int answer = 0;
        
        int start[] = new int[lines.length];
        int end[] = new int[lines.length];
        ArrayList<Integer>arr = new ArrayList<>();
        for(int i=0; i<lines.length; i++){
            String s = lines[i];
            String time = s.substring(11);
            String[] temp = time.split(" ");
            int st = (int)(Integer.parseInt(temp[0].substring(0,2))*60*60*1000+Integer.parseInt(temp[0].substring(3,5))*60*1000+Double.parseDouble(temp[0].substring(6))*1000);
            int diff =(int)(Double.parseDouble(temp[1].substring(0,temp[1].length()-1))*1000);
            start[i]=st-diff+1; // 2016-09-15 03:10:33.020 0.011s 는 33.010 부터 33.020까지 처리된 요청
            arr.add(st-diff+1);
            end[i]=st; //끝나는 시간 
            arr.add(st); // 시작시간과 끝나는시간을 모두 arr에 담아준다.
            
            
         }

        for(int i=0; i<arr.size();i++ ){
              
              int t = arr.get(i);

              int cnt =0;
              for(int j=0; j<start.length; j++){

                  if(t+1000<=end[j]){
                    if((t+1000)>start[j]){ //실질적으로는 t+999까지가 처리시간 따라서 t+1000과 시작시간은 같으면 cnt 포함 안함
                            cnt++;
                    }     
                  }
                  else{
                      if(t<=end[j]){cnt++;} //1초전의 시작시간과 끝나는 시간은 같으면 cnt 포함
                  }
             }
        
            if(answer<cnt){answer =cnt;}
            

        }
        

        
        
        return answer;
    }
}

'프로그래머스 > 문자열' 카테고리의 다른 글

최댓값과 최솟값  (0) 2021.01.31
압축 - KaKao 기출  (0) 2021.01.31
JadenCase 문자열 만들기  (0) 2021.01.27
방금 그곡 - Kakao Blind recruitment  (0) 2021.01.25
오픈채팅방  (0) 2021.01.21