어제의 나보다 성장한 오늘의 나

[프로그래머스][2018 KAKAO BLIND RECRUITMENT][자바] 추석 트래픽 본문

알고리즘/프로그래머스(Programmers)

[프로그래머스][2018 KAKAO BLIND RECRUITMENT][자바] 추석 트래픽

NineOne 2021. 4. 12. 22:15

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-1

programmers.co.kr

import java.io.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

class Solution {
	public int solution(String[] lines) throws ParseException {
	        int answer = 0;
	        
	        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
	        List<Data> list = new ArrayList<>();
	        
	        for(int i=0; i<lines.length; i++) {
	        	String[] timeData = lines[i].split(" ");
	        	String time = timeData[1];
	        	double responseTime = Double.parseDouble(timeData[2].replace("s", ""));
	        	
	        	Date formatDate = sdf.parse(timeData[1]);
	        	int end = (int) formatDate.getTime();
	        	int start = (int) (end - (responseTime*1000)) +1;
	        	
	        	list.add(new Data(start, end));
	        }
	        
	        for(int i=0; i<list.size(); i++) {
	        	Data data = list.get(i);
	        	int result =1;
	        	
	        	for(int j=i+1; j<list.size(); j++) {
	        		if(-1000<data.end - list.get(j).start) {
	        			result++;
	        		}
	        	}
	        	
	        	answer = Math.max(result, answer);
	        }
	        
	        return answer;
	    }
	
	static class Data{
		int start;
		int end;
		public Data(int start, int end) {
			super();
			this.start = start;
			this.end = end;
		}
	}
}

정리

  • split을 통해 시간이랑 응답 시간을 나눈다.
  • SimpleDateFormat의 parse를 통해 Date로 바꾸고 getTime()으로 시간을 뺸다. (불편하게 시분초 생각 안해도 됨)
  • start 시간과 end 시간을 list에 저장한다.
  • 각 list에 끝시간과 그 이후의 list부터의 start시간을 빼는데, 1초가 넘지 않는다면 모두 처리할 수 있는 구간이다.
  • end를 잡고 하는 이유는 자신보다 end가 작다면 신경 쓸 필요가 없기 때문이다.
Comments