λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Algorithm

[λ°±μ€€] 1931번: νšŒμ˜μ‹€λ°°μ •(그리디, μ •λ ¬)

by 주발2 2020. 2. 12.
λ°˜μ‘ν˜•

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

 

1931번: νšŒμ˜μ‹€λ°°μ •

(1,4), (5,7), (8,11), (12,14) λ₯Ό μ΄μš©ν•  수 μžˆλ‹€.

www.acmicpc.net

μ½”λ“œ

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		int N = scan.nextInt();
		int[][] arr = new int[N][2];	// 회의 별 μ‹œμž‘, μ’…λ£Œ μ‹œκ°„ μ €μž₯ν•  λ°°μ—΄
		for(int i=0; i<arr.length; i++) {
			arr[i][0] = scan.nextInt();	// μ‹œμž‘ μ‹œκ°„
			arr[i][1] = scan.nextInt();	// μ’…λ£Œ μ‹œκ°„
		}
		
		// μ’…λ£Œ μ‹œκ°„ 순으둜 μ •λ ¬ -> μ’…λ£Œ μ‹œκ°„μ΄ 같을 경우 μ‹œμž‘ μ‹œκ°„ 순 μ •λ ¬.
		Arrays.sort(arr, new Comparator<int[]>() {
			@Override
			public int compare(int[] arr1, int[] arr2) {
				if(arr1[1] == arr2[1]) {	// μ’…λ£Œ μ‹œκ°„μ΄ 같을 경우
					return Integer.compare(arr1[0], arr2[0]);	// μ‹œμž‘ μ‹œκ°„ μ˜€λ¦„μ°¨μˆœ μ •λ ¬
				}
				return Integer.compare(arr1[1], arr2[1]);		// μ’…λ£Œ μ‹œκ°„ μ˜€λ¦„μ°¨μˆœ μ •λ ¬
			}
		});
		
		int maxMeeting = 0;	// μ΅œλŒ€ 회의 수
		int checkTime = 0;	// λ‹€μŒ μ‹œμž‘ μ‹œκ°„κ³Ό 비ꡐ	
		for(int i=0; i<N; i++) {
			if(arr[i][0] >= checkTime) {     // λ‹€μŒ 회의 μ‹œμž‘ μ‹œκ°„μ΄ 이전 회의 μ’…λ£Œ μ‹œκ°„λ³΄λ‹€ 클 경우
				checkTime = arr[i][1];	 // λ‹€μŒ μ’…λ£Œ μ‹œκ°„ λ³€κ²½ 
				maxMeeting += 1;         // 회의 +1
			}
		}
		
		System.out.println(maxMeeting);
		scan.close();
	}

}

풀이

각 νšŒμ˜μ— λŒ€ν•΄ μ‹œμž‘μ‹œκ°„κ³Ό μ’…λ£Œμ‹œκ°„μ΄ 주어지고, νšŒμ˜κ°€ κ²ΉμΉ˜μ§€ μ•Šκ²Œ ν•˜λ©΄μ„œ νšŒμ˜μ‹€μ„ μ‚¬μš©ν•  수 μžˆλŠ” μ΅œλŒ€μˆ˜μ˜ 회의λ₯Ό 찾아라.

 

μœ„ λ¬Έμ œμ—μ„œ 핡심은 λ‹€μŒκ³Ό κ°™λ‹€.

 

1. 회의의 μ‹œμž‘μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ΄ 같을 μˆ˜λ„ μžˆλ‹€.(1μ‹œ ~ 3μ‹œ) , (3μ‹œ ~ 5μ‹œ)

2. λλ‚˜λŠ” μ‹œκ°„μ΄ κ°€μž₯ 짧은 것 λΆ€ν„° νšŒμ˜κ°€ κ²ΉμΉ˜μ§€ μ•Šκ²Œ 카운트 ν•΄μ£Όλ©΄ λœλ‹€.

 

μœ„ 2번의 방법을 μƒκ°ν•΄λ‚΄λŠ” 것이 μ „λΆ€λ‹€ ..

μ²˜μŒμ—” μ‹œμž‘ μ‹œκ°„ 순으둜 μ •λ ¬ ν›„ μ’…λ£Œ μ‹œκ°„μ„ μ •λ ¬ν•˜κ³ , κ²ΉμΉ˜μ§€ μ•ŠλŠ” 풀이λ₯Ό 생각해 λ΄€μ§€λ§Œ... λ°˜λ‘€κ°€ μžˆμ—ˆλ‹€.

1μ‹œ~8μ‹œ, 2μ‹œ~8μ‹œ, 3μ‹œ~4μ‹œ

μœ„μ™€ 같을땐 1μ‹œ, 2μ‹œκ°€ μ•„λ‹Œ 3μ‹œ~4μ‹œλ₯Ό μ„ νƒν•˜λŠ”κ²Œ 더 λ§Žμ€ 회의λ₯Ό ν•  수 μžˆλ‹€.

 

λ”°λΌμ„œ μ‹œμž‘ μ‹œκ°„μ΄ μ•„λ‹Œ μ’…λ£Œ μ‹œκ°„μ„ κΈ°μ€€μœΌλ‘œ 작고 μ •λ ¬μ„ν•˜κ³ , μ’…λ£Œ μ‹œκ°„μ΄ κ°™μœΌλ©΄ μ‹œμž‘ μ‹œκ°„μ„ μ •λ ¬ν•œλ‹€.

λλ‚˜λŠ” μ‹œκ°„μ΄ λΉ λ₯Όμˆ˜λ‘ -> λ‹€μŒ νšŒμ˜λŠ” 일찍 μ‹œμž‘ν•œλ‹€.

κ·Έ ν›„ λλ‚˜λŠ” μ‹œκ°„ μ΄ν›„λ‘œ κ°€μž₯ 빨리 μ‹œμž‘ν•˜λŠ” 회의λ₯Ό μ„ νƒν•œλ‹€.(μ‹œμž‘ μ‹œκ°„λ„ μ˜€λ¦„μ°¨μˆœ μ •λ ¬)

 

문제의 예제 μž…λ ₯ 1을 풀이에 맞게 μ’…λ£Œ μ‹œκ°„ μ •λ ¬ -> μ‹œμž‘ μ‹œκ°„ 정렬을 ν•œ ν›„ 좜λ ₯ν•œ κ²°κ³Όλ‹€.

(1,4) -> (5,7) -> (8,11) -> (12,14) λ₯Ό 회의둜 ν•˜λ©΄ 회의λ₯Ό μ΅œλŒ€ 4번 ν•  수 μžˆλ‹€.

 

Java - Comparator μ„€λͺ…

 

λ°˜μ‘ν˜•

λŒ“κΈ€