yu-heejin / coding-test

백준, 프로그래머스 코딩 테스트 💻
https://www.mycompiler.io/ko/new/java
1 stars 0 forks source link

선 긋기 #39

Open yu-heejin opened 2 months ago

yu-heejin commented 2 months ago

https://www.acmicpc.net/problem/2170

yu-heejin commented 2 months ago
import java.io.*;
import java.util.*;

public class Main {

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

        int N = Integer.parseInt(br.readLine());

        int[][] numbers = new int[N][2];

        for (int i = 0; i < N; i++) {
            String[] input = br.readLine().split(" ");
            for (int j = 0; j < 2; j++) {
                numbers[i][j] = Integer.parseInt(input[j]);
            }
        }

        // 시작점 기준으로 정렬
        Arrays.sort(numbers, (o1, o2) -> {
            if (o1[0] == o2[0]) return o1[1] - o2[1];
            return o1[0] - o2[0];
        });

        int min = numbers[0][0];   // 가장 작은 시작점
        int max = numbers[0][1];   // 가장 큰 시작점
        int length = max - min;

        for (int i = 1; i < N; i++) {
            // 현재 선이 이전 선 안에 포함하고 있는 경우 - 계산하지 않고 넘어간다.
            // if (numbers[i][0] >= min && numbers[i][1] <= max) continue;

            // 현재 선이 이전 선의 시작점 안에 있고, 끝점이 더 긴 경우
            if (numbers[i][0] >= min && numbers[i][0] <= max &&numbers[i][1] > max) {
                max = numbers[i][0];
                length += (max - length);
            } else {
                min = numbers[i][0];
                max = numbers[i][1];
                length += (max - min);
            }
        }

        System.out.println(length);
    }
}