JAVA/Java 백준 문제풀이

자바, 백준 1931

Do.K 2022. 4. 9. 02:10

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

 

1931번: 회의실 배정

(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.

www.acmicpc.net

한시간 넘게 고민했다

어떤식으로 풀어나가야할지 감은 잡혔는데 재배열을 어떻게 해야하는지 몰라서 막혔다

comparator, comparable 은 내겐 없는 지식이었다..

30분정도만 고민하고 가닥이 잡히면 해답을 봐야할성 싶다

없는 지식은 문제로 익히는게 기억에 오래남는듯하여..

아래 글을 참조하였음

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        
	Scanner sc = new Scanner(System.in);
	int N = sc.nextInt();
	int[][] arr = new int[N][2];
	
	for (int i=0;i<N;i++) {
		for (int j=0;j<2;j++) {
		arr[i][j] = sc.nextInt();
		}
	}
	
//	for (int i=0;i<N;i++) {		위와 같으나 다르게 표현한 것
//		arr[i][0] = sc.nextInt();
//		arr[i][1] = sc.nextInt();
//	}
	Arrays.sort(arr, new Comparator<int[]>(){	//arr를 오버라이딩한 compare에 맞춰 재배열하겠다
		@Override
		public int compare(int[] o1, int[]o2) {
			if (o1[1]==o2[1]) {	//종료시간이 같으면
				return o1[0] - o2[0]; 	//시작시간이 빠른쪽이 먼저되게
			}
			return o1[1] - o2[1]; //종료시간이 빠른쪽이 먼저되게
		}
	});
	
	int count=0;
	int k=0;	
	for (int j=0;j<N;j++) {	
		if ( k<=(arr[j][0])) { 
				k=arr[j][1];
				count++;
		}
	}
	System.out.println(count);

	}
}

 

 

https://st-lab.tistory.com/145