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

AMUD·2022년 7월 29일
0

Algorithm

목록 보기
20/78

문제


문제링크

접근

  • 처음에는 dp, 그 다음에는 슬라이딩 윈도우로 풀어보려고 했지만 공간적, 시간적 복잡도가 문제 출제자께 죄송할 정도로 터무니 없을 것 같아 아니라고 판단하였다.
  • 그리고 한참 고민하다가, 임계값을 이용하라는 힌트를 가지고 아래와 같이 풀이하였다.
  • 정답을 확인하고 다른 사람들의 풀이를 보는데, LocalDateTime으로 바로 연산한 사람을 못 봤다..!

소스 코드

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

class Main {
    static int N, M;
    static int[] Group;

    public static void main(String[] args) throws Exception {
        String lines[] = {"2016-09-15 01:00:04.002 2.0s",
"2016-09-15 01:00:07.000 2s"};

        Solution sol = new Solution();
        System.out.println("result : " + sol.solution(lines));
    }
}

class Solution {
    public int solution(String[] lines) throws Exception {
        int answer = 0;
        int lineCnt = lines.length;

        LocalDateTime startTimes[] = new LocalDateTime[lineCnt];
        LocalDateTime endTimes[] = new LocalDateTime[lineCnt];
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");

        for (int i = 0; i < lineCnt; i++) {
            LocalDateTime end = LocalDateTime.parse(lines[i].substring(0, 23), formatter);
            Double lastTaskTime = Double.parseDouble(lines[i].substring(24, lines[i].length() - 1));
            LocalDateTime start = end.plusNanos((long) (lastTaskTime * 1000000000) + 1);

            endTimes[lineCnt - i - 1] = end;
            startTimes[lineCnt - i - 1] = start;
        }

        for (int i = 0; i < lineCnt; i++) {
            int cnt = 1;
            if (answer >= lineCnt - i)
                break;
            for (int j = i + 1; j < lineCnt; j++) {
                if (startTimes[j].isAfter(endTimes[j].plusSeconds(1)))
                    cnt++;
            }
            answer = answer > cnt ? answer : cnt;
        }
        return answer;
    }
}
profile
210's Velog :: Ambition Makes Us Diligent

0개의 댓글