[프로그래머스] 카카오_추석 트래픽 (자바 풀이)

문제

https://programmers.co.kr/learn/courses/30/lessons/17676?language=java 

 

코딩테스트 연습 - [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

풀이

이 문제는 String 처리를 잘 해야한다. 나는 자바의 라이브러리들을 이용해 주어진 형식에 맞춰 적절히 parsing 하였다. 이를 통해 요청시간과 요청 마감 시간을 Pair라는 클래스로 저장하였다. 그리고 요청시간과 요청 마감 시간 두 개를 기준으로 1초간 몇개의 응답이 있는지 count 해주는 방법을 택했다.

코드

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
48
49
50
51
52
53
54
55
56
57
58
59
import java.util.*;
 
class Solution {
    public int solution(String[] lines) {
        int answer = 0;
        Pair arr[] = new Pair[lines.length];
        for(int i=0; i<lines.length; i++){
            arr[i] = str2time(lines[i]);
        }
        
        for(int i=0; i<arr.length; i++){
            answer = Math.max(answer, count(arr[i].start, arr, i));
            answer = Math.max(answer, count(arr[i].end, arr, i));
        }
        
        return answer;
    }
    
    static int count(int start, Pair[] arr, int i){
        int end = start + 1000;
        int cnt = 1;
        for(int j=0; j<arr.length; j++){
            if(i==j) continue;
            if( arr[j].end < start || arr[j].start >= end ) continue;
            cnt++;
        }
        return cnt;
    }
    
    static Pair str2time(String str){
        String[] temp = str.split(" ");
       
        String[] tmp = temp[1].split(":");
        int hour = Integer.parseInt(tmp[0])*60*60*1000;
        int min = Integer.parseInt(tmp[1])*60*1000;
        int sec = Integer.parseInt(tmp[2].substring(0,2))*1000 + Integer.parseInt(tmp[2].substring(3,6));
        
        int calTime = 0;
        if(temp[2].length()> 2){
           calTime = Integer.parseInt(temp[2].substring(0,1))*1000 + Integer.parseInt(temp[2].substring(2,temp[2].length()-1)); 
        }else{
            calTime = Integer.parseInt(temp[2].substring(0,1))*1000;
        }
        
        int end = hour+min+sec;
        int start = end - calTime +1;
        
        return new Pair(start, end);
    }
    
    static class Pair{
        int start;
        int end;
        Pair(int a, int b){
            this.start = a;
            this.end = b;
        }
    }
}
cs

결과

반응형

댓글

Designed by JB FACTORY