Algorithm/programmers

[2018 카카오 블라인드 1차]추석트래픽

마닐라 2022. 7. 7. 13:49

📍 문제 설명

https://school.programmers.co.kr/learn/courses/30/lessons/17676

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

💡 접근

1. 문자열들 파싱해서 시작 시간, 처리 시간을 구한 뒤 리스트에 넣었다.

2. 각 구간의 처리량을 구하는 부분에서 시간을 좀 오래 잡아먹었다.

 

 

👩‍💻 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main {
    public int solution(String[] lines) {
        int answer = 0;
        ArrayList<Time> list = new ArrayList<>();
        //응답완료시간, 처리 시간 으로 시작 시간 구하기
        for(int i = 0; i < lines.length; i++) {
            String[] split = lines[i].split(" ");
            //시간이랑 처리시간만 이용함
            String[] split2 = split[1].split(":");
            int hour = Integer.parseInt(split2[0]) * 3600 * 1000;
            int minute = (Integer.parseInt(split2[1]) * 60) * 1000;
            int second = (int) (Double.parseDouble(split2[2]) * 1000);//57.421 -> 57421 표현
            int end = hour + minute + second;

            split[2] = split[2].replace("s", "");

            int start = end - (int) (Double.parseDouble(split[2]) * 1000) + 1;
            list.add(new Time(start, end));
        }
        System.out.println(list);

        //현재 끝시간을 기준으로 1초 이하인 부분 찾기
        for(int i = 0; i < list.size(); i++) {
            int cnt = 1; //자기 구간은 처리
            System.out.println("end : " + list.get(i).end);
            for(int j = i+1 ; j < list.size(); j++) {
                System.out.println("start : " + list.get(j).start);
                if(list.get(j).start - list.get(i).end < 1000) cnt++;
            }
            System.out.println("cnt : " + cnt);
            answer = Math.max(cnt, answer);
        }

        return answer;
    }

    private class Time {
        private int start;
        private int end;

        public Time(int start, int end) {
            this.start = start;
            this.end = end;
        }

        @Override
        public String toString() {
            return "Time{" +
                    "start=" + start +
                    ", end=" + end +
                    '}';
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Main t = new Main();

        String[] lines = {
                "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 2.31s",
                "2016-09-15 21:00:00.966 0.381s",
                "2016-09-15 21:00:02.066 2.62s"
        };
        t.solution(lines);
    }
}