백준 1931

Jb·2024년 3월 14일

기본 로직:
1.주어진 입출력을 2차원 배열로 만들기.
2.정렬(제네릭,익명구현체,Array.sort)를 사용하여 2차원 배열의 2번째 인덱스의 크기를 기준으로 오름차순으로 정렬하기
3.정렬해서 2번째값이 같다면 2차원배열의 1첫번째값을 작은순으로 구하고 count세기
{a,b}
a: 1번 인덱스
b: 2번 인덱스

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int meeting = Integer.parseInt(br.readLine()); // 회의의 수 입력 받기
        int[][] mt = new int[meeting][2]; // 2차원 배열 선언: 각 회의의 시작 시간과 종료 시간 저장
        int count = 0;
        //배열을 짤라놨다 2개씩 묶어서
        for (int i = 0; i < meeting; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine(), " "); // 한 줄씩 읽어서 공백으로 분리
            mt[i][0] = Integer.parseInt(st.nextToken()); // 시작 시간
            mt[i][1] = Integer.parseInt(st.nextToken()); // 종료 시간
        }
       //값을 1번 인덱스로 정렬
        Arrays.sort(mt, new Comparator<int[]>() {
            //<int[]>() 제네릭
            @Override
            public int compare(int[] o1, int[] o2) { //o1에는 첫번째 행 ,o2에는 두번째 행

                // 종료시간이 같을 경우 시작시간이 빠른순으로 정렬해야한다.
                if (o1[1] == o2[1]) {
                    return o1[0] - o2[0];
                }

                return o1[1] - o2[1];
            }
        });
        int prev_end_time = 0;
        for (int i = 0; i < meeting; i++) {
            if (prev_end_time <= mt[i][0]) {
                prev_end_time = mt[i][1];
                count++;
            }
        }
        System.out.println(count);
        }
    }

1.제네릭 사용 아직 미숙하다.
2.람다를 활용하면 엄청 간단한 식이 만들어진다.
3.익명 구현체(Anonymous Implementation)을 공부하자.

0개의 댓글