๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

[๋ฐฑ์ค€] 1946๋ฒˆ: ์‹ ์ž… ์‚ฌ์›(๊ทธ๋ฆฌ๋””, ์ •๋ ฌ)

by ์ฃผ๋ฐœ2 2020. 1. 29.
๋ฐ˜์‘ํ˜•

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

 

1946๋ฒˆ: ์‹ ์ž… ์‚ฌ์›

์ฒซ์งธ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T(1 ≤ T ≤ 20)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์— ์ง€์›์ž์˜ ์ˆซ์ž N(1 ≤ N ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ ์ค„์—๋Š” ๊ฐ๊ฐ์˜ ์ง€์›์ž์˜ ์„œ๋ฅ˜์‹ฌ์‚ฌ ์„ฑ์ , ๋ฉด์ ‘ ์„ฑ์ ์˜ ์ˆœ์œ„๊ฐ€ ๊ณต๋ฐฑ์„ ์‚ฌ์ด์— ๋‘๊ณ  ํ•œ ์ค„์— ์ฃผ์–ด์ง„๋‹ค. ๋‘ ์„ฑ์  ์ˆœ์œ„๋Š” ๋ชจ๋‘ 1์œ„๋ถ€ํ„ฐ N์œ„๊นŒ์ง€ ๋™์„์ฐจ ์—†์ด ๊ฒฐ์ •๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

www.acmicpc.net

 

ํ‹€๋ฆฐ ์ฝ”๋“œ

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int T = scan.nextInt();
		for(int tc=0; tc<T; tc++) {
			int N = scan.nextInt();	// ์ง€์›์ž ์ˆซ์ž
			int[][] arr = new int[N][2];	// ๊ฐ ์ง€์›์ž์˜ ์„œ๋ฅ˜, ๋ฉด์ ‘ ์„ฑ์ 
			int count = N;			// ์„ ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ์‹ ์ž…์‚ฌ์›์˜ ์ตœ๋Œ€ ์ธ์›์ˆ˜
			
			for(int i=0; i<N; i++) {
				arr[i][0] = scan.nextInt();	
				arr[i][1] = scan.nextInt();
			}
			
			// ์ง€์›์ž ๋ณ„๋กœ ์„œ๋ฅ˜ or ๋ฉด์ ‘ ์‹ฌ์‚ฌ ํŒ๋‹จํ•˜๊ธฐ
			for(int i=0; i<N; i++) {
				boolean docu = true;	// ์„œ๋ฅ˜์‹ฌ์‚ฌ ํŒ๋‹จ
				boolean pt = true;		// ๋ฉด์ ‘์‹ฌ์‚ฌ ํŒ๋‹จ
				
				for(int j=0; j<N; j++) {	// ์„œ๋ฅ˜์‹ฌ์‚ฌ ์„ฑ์  ํŒ๋‹จ
					if(arr[i][0] < arr[j][0]) {	// ์ž์‹ ๋ณด๋‹ค ์„œ๋ฅ˜ ์„ฑ์ ์ด ๋–จ์–ด์ง€๋Š” ์ธ์›์ด ์žˆ์„๊ฒฝ์šฐ(์ˆซ์ž๊ฐ€ ๋” ํด๊ฒฝ์šฐ)
						docu = false;
						break;
					}
				}
				
				for(int j=0; j<N; j++) {	// ๋ฉด์ ‘์‹ฌ์‚ฌ ์„ฑ์  ํŒ๋‹จ
					if(arr[i][1] < arr[j][1]) {	// ์ž์‹ ๋ณด๋‹ค ๋ฉด์ ‘ ์„ฑ์ ์ด ๋–จ์–ด์ง€๋Š” ์ธ์›์ด ์žˆ์„๊ฒฝ์šฐ(์ˆซ์ž๊ฐ€ ๋” ํด๊ฒฝ์šฐ)
						pt = false;
						break;
					}
				}
				
				// ์„œ๋ฅ˜, ๋ฉด์ ‘ ์„ฑ์  ๋ชจ๋‘ ์ž์‹ ๋ณด๋‹ค ๋–จ์–ด์ง€๋Š” ์ธ์›์ด ์—†์„๊ฒฝ์šฐ => ์„ ๋ฐœ X
				if(docu == true && pt == true) {
					count --;
				}
			}
			
			System.out.println(count);
		}
		
		scan.close();
	}

}

 

ํ’€์ด

๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ์—๋„ ์˜ค๋ž˜๊ฑธ๋ ธ๋‹ค... ์ž…๋ ฅ๋ฐ›๋Š”๊ฒŒ ์ ์ˆ˜๊ฐ€ ์•„๋‹Œ ์ˆœ์œ„ ๋“ฑ์ˆ˜์ด๋‹ค.

๋”ฐ๋ผ์„œ ์ž…๋ ฅ์ด 1, 5๊ฐ€ ์žˆ๋‹ค๋ฉด 5๊ฐ€ ์•„๋‹Œ 1์ด ๋” ๋†’์€ ์„ฑ์ ์ด๋‹ค.(์ˆœ์œ„)

๋ฌธ์ œ์—์„œ ์ง€์›์ž A์™€ ๋‹ค๋ฅธ ๋ชจ๋“  ์ง€์›์ž B์˜ ์„œ๋ฅ˜์‹ฌ์‚ฌ ์„ฑ์ ๊ณผ ๋ฉด์ ‘์‹œํ—˜ ์„ฑ์ ์„ ๋น„๊ตํ–ˆ์„๋•Œ, ์„ฑ์  ์ค‘ ์ ์–ด๋„ ํ•˜๋‚˜๊ฐ€ ๋‹ค๋ฅธ ์ง€์›์ž๋ณด๋‹ค ๋–จ์–ด์ง€์ง€ ์•Š์•„์•ผ ์„ ๋ฐœ์„ ํ•œ๋‹ค. ์ง€์›์ž๊ฐ€ 5๋ช…์ธ ๊ฒฝ์šฐ์˜ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž.

 

A: 3  2

B: 1  4

C: 4  1

D: 2  3

E: 5  5

 

A, B, C, D, E 5๋ช…์˜ ์ง€์›์ž๊ฐ€ ์žˆ๊ณ , ์„œ๋ฅ˜์™€ ๋ฉด์ ‘ ์„ฑ์ ์ด ์œ„์™€ ๊ฐ™์„๋•Œ, ์œ„์—์„œ ์ง€์›์ž E๋Š” ๊ฒฐ์ฝ” ์„ ๋ฐœ๋˜์ง€ ์•Š๋Š”๋‹ค.

์ˆซ์ž๊ฐ€ ๋“ฑ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋ฏ€๋กœ, E์˜ ์„œ๋ฅ˜ ์„ฑ์ ๊ณผ ๋ฉด์ ‘ ์„ฑ์ ์€ ๋‹ค๋ฅธ ์ง€์›์ž๋“ค์— ๋น„ํ•ด ๋ชจ๋‘ ๋–จ์–ด์ง„๋‹ค.

 

์ง€์›์ž๊ฐ€ 7๋ช…์ธ ๊ฒฝ์šฐ์˜ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๋ฉด,,

A: 3  6

B: 7  3

C: 4  2

D: 1  4

E: 5  7

F: 2  5

G: 6  1

 

์œ„์™€ ๊ฐ™์ด ์žˆ์„๋•Œ,

์ง€์›์ž A๋Š” ์ง€์›์ž D์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ, ์„œ๋ฅ˜์„ฑ์ ๊ณผ ๋ฉด์ ‘์„ฑ์ ์ด ๋ชจ๋‘ ๋–จ์–ด์ง€๋ฏ€๋กœ ์„ ๋ฐœ์„ ํ•  ์ˆ˜ ์—†๋‹ค.

์ง€์›์ž B๋Š” ์ง€์›์ž C์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ, ์„œ๋ฅ˜์„ฑ์ ๊ณผ ๋ฉด์ ‘์„ฑ์ ์ด ๋ชจ๋‘ ๋–จ์–ด์ง€๋ฏ€๋กœ ์„ ๋ฐœ์„ ํ•  ์ˆ˜ ์—†๋‹ค.

์ง€์›์ž E๋Š” ์ง€์›์ž D์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ, ์„œ๋ฅ˜์„ฑ์ ๊ณผ ๋ฉด์ ‘์„ฑ์ ์ด ๋ชจ๋‘ ๋–จ์–ด์ง€๋ฏ€๋กœ ์„ ๋ฐœ์„ ํ•  ์ˆ˜ ์—†๋‹ค.

์ง€์›์ž F๋Š” ์ง€์›์ž D์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ, ์„œ๋ฅ˜์„ฑ์ ๊ณผ ๋ฉด์ ‘์„ฑ์ ์ด ๋ชจ๋‘ ๋–จ์–ด์ง€๋ฏ€๋กœ ์„ ๋ฐœ์„ ํ•  ์ˆ˜ ์—†๋‹ค.

๋”ฐ๋ผ์„œ ์„ ๋ฐœ ํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์›์€ C, D, G 3๋ช…์˜ ์ง€์›์ž์ด๋‹ค.

 

์œ„ ์ฝ”๋“œ์—์„œ๋Š”, ์„œ๋ฅ˜ ์„ฑ์ ๊ณผ ๋ฉด์ ‘ ์„ฑ์ ์„ ๋”ฐ๋กœ๋”ฐ๋กœ ๋น„๊ตํ–ˆ๊ณ , ๋น„๊ต ์กฐ๊ฑด๋„ ํ‹€๋ ธ๋‹ค.

 

 

ํ‹€๋ฆฐ ์ฝ”๋“œ2

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int T = scan.nextInt();
		for(int tc=0; tc<T; tc++) {
			int N = scan.nextInt();	// ์ง€์›์ž ์ˆซ์ž
			int[][] arr = new int[N][2];	// ๊ฐ ์ง€์›์ž์˜ ์„œ๋ฅ˜, ๋ฉด์ ‘ ์„ฑ์ 
			int count = N;			// ์„ ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ์‹ ์ž…์‚ฌ์›์˜ ์ตœ๋Œ€ ์ธ์›์ˆ˜
			
			for(int i=0; i<N; i++) {
				arr[i][0] = scan.nextInt();	
				arr[i][1] = scan.nextInt();
			}
			
			// ์ง€์›์ž ๋ณ„๋กœ ์„œ๋ฅ˜, ๋ฉด์ ‘ ์„ฑ์  ๋น„๊ต
			for(int i=0; i<N; i++) {
				boolean flag = true;
				
				for(int j=0; j<N; j++) {
					// ์ง€์›์ž A์˜ ์„ฑ์ ์ด ๋‹ค๋ฅธ ์–ด๋–ค ์ง€์›์ž B์˜ ์„ฑ์ ์— ๋น„ํ•ด ์„œ๋ฅ˜, ๋ฉด์ ‘ ์„ฑ์ ์ด ๋ชจ๋‘ ๋–จ์–ด์งˆ๋•Œ
					// ์ˆซ์ž๊ฐ€ ํฐ๊ฒŒ ๋“ฑ์ˆ˜๊ฐ€ ๋‚ฎ์Œ.
					if(arr[i][0] > arr[j][0] && arr[i][1] > arr[j][1]) {	
						flag = false;
						break;
					}
				}
				
				// ์„œ๋ฅ˜, ๋ฉด์ ‘ ์„ฑ์  ๋ชจ๋‘ ์ž์‹ ๋ณด๋‹ค ๋–จ์–ด์ง€๋Š” ์ธ์›์ด ์—†์„๊ฒฝ์šฐ => ์„ ๋ฐœ X
				if(!flag) 
					count --;
			}
			
			System.out.println(count);
		}
		
		scan.close();
	}

}

 

์œ„ ์ฝ”๋“œ๋Š” ์ง€์›์ž๋“ค ๋ผ๋ฆฌ ๋น„๊ต๋ฅผ ํ•ด์„œ, ๋งŒ์•ฝ ์ง€์›์ž A๊ฐ€ ์ž„์˜์˜ ์ง€์›์ž๋ณด๋‹ค ์„œ๋ฅ˜ ์„ฑ์ , ๋ฉด์ ‘ ์„ฑ์ ์ด ๋ชจ๋‘ ๋–จ์–ด์งˆ๊ฒฝ์šฐ

					// ์ง€์›์ž A์˜ ์„ฑ์ ์ด ๋‹ค๋ฅธ ์–ด๋–ค ์ง€์›์ž B์˜ ์„ฑ์ ์— ๋น„ํ•ด ์„œ๋ฅ˜, ๋ฉด์ ‘ ์„ฑ์ ์ด ๋ชจ๋‘ ๋–จ์–ด์งˆ๋•Œ
					// ์ˆซ์ž๊ฐ€ ํฐ๊ฒŒ ๋“ฑ์ˆ˜๊ฐ€ ๋‚ฎ์Œ.
					if(arr[i][0] > arr[j][0] && arr[i][1] > arr[j][1]) {	
						flag = false;
						break;
					}

์„ ๋ฐœ๋  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ count--๋ฅผ ํ•ด์ฃผ์—ˆ๋Š”๋ฐ ...

 

 

์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค ...

 

์ง€์›์ž์˜ ์ˆซ์ž๊ฐ€ ์ตœ๋Œ€ 100,000๋ช… ์ด๋ฏ€๋กœ ๋ชจ๋“  ์ง€์›์ž์ˆ˜๋ฅผ ๋น„๊ตํ•˜๊ธฐ์— ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค ..

 

 

 

์ตœ์ข… ์ฝ”๋“œ

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 T = scan.nextInt();
		for(int tc=0; tc<T; tc++) {
			int N = scan.nextInt();	// ์ง€์›์ž ์ˆซ์ž
			int[][] arr = new int[N][2];	// ๊ฐ ์ง€์›์ž์˜ ์„œ๋ฅ˜, ๋ฉด์ ‘ ์„ฑ์ 
			int count = 1;			// ์ •๋ ฌ์˜ ์ฒซ ๋ฒˆ์งธ ์‚ฌ๋žŒ์€ ์ž๋™ ์ฑ„์šฉ
			for(int i=0; i<N; i++) {
				arr[i][0] = scan.nextInt();	
				arr[i][1] = scan.nextInt();
			}
			
			// ์ •๋ ฌ - Comparator
			Arrays.sort(arr, new Comparator<int[]>() {
				@Override
				public int compare(int[] arr1, int[] arr2) {	// ์„œ๋ฅ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ์‹œํ–‰ํ•œ๋‹ค.
					return Integer.compare(arr1[0], arr2[0]);
				}
			});
			
			int pivot = arr[0][1];	// ์ฒซ ๋ฒˆ์งธ ์ง€์›์ž์˜ ๋ฉด์ ‘ ์„ฑ์ ์ด ๊ธฐ์ค€์ด ๋œ๋‹ค.
			for(int i=1; i<N; i++) {
				if(arr[i][1] < pivot) {	// ๋ฉด์ ‘ ์„ฑ์ ์ด ๊ทธ ์ „ ์„ ๋ฐœ๋œ ์ง€์›์ž ๋ณด๋‹ค ๋›ฐ์–ด๋‚ ๊ฒฝ์šฐ => ์„ ๋ฐœ
					pivot = arr[i][1];	// ๋‹ค์Œ ํ•ฉ๊ฒฉ์ž๋ฅผ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์ „์— ์„ ๋ฐœ๋œ ์ง€์›์ž์˜ ๋ฉด์ ‘ ์„ฑ์  ์ €์žฅ
					count ++;
				}
			}
			System.out.println(count);
		}
		scan.close();
	}
}

 

ํ’€์ด

๋ฌธ์ œ์—์„œ ๋™์„์ฐจ ์—†์ด ๊ฒฐ์ •๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด์„œ ํ•œ ์„ฑ์ ์€ ์ •๋ ฌ์„ ํ•˜๊ณ , ๋‚˜๋จธ์ง€ ์„ฑ์ ์œผ๋กœ ๋น„๊ต๋ฅผ ํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์€ ๋“ค์—ˆ์ง€๋งŒ,, ๊ฒฐ๊ตญ ํ•ด๊ฒฐ์€ ๋ชปํ–ˆ๋‹ค.

์œ„ ํ’€์ด๋Š” ์ง€์›์ž์˜ ์„œ๋ฅ˜ ์ˆœ์œ„์™€ ๋ฉด์ ‘ ์ˆœ์œ„์ค‘ ์„œ๋ฅ˜ ์ˆœ์œ„๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ์„ ํ•˜๊ณ , ๋ฉด์ ‘ ์ˆœ์œ„๋กœ ์ง€์›์ž๊ฐ€ ์„ ๋ฐœ์ด ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ํŒ๋‹จํ•œ๋‹ค.

 

N = 7 ์„ ๊ธฐ์ค€์œผ๋กœ ์˜ˆ๋ฅผ ๋“ค๋ฉด์„œ ๋ณด์ž.

์œ„ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด, ์„œ๋ฅ˜ ์ˆœ์œ„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์„ ์ •๋ ฌํ•œ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์ง€์›์ž์˜ ๊ฒฝ์šฐ ์„œ๋ฅ˜ ์ˆœ์œ„๋กœ 1์œ„์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ฌด์กฐ๊ฑด ์„ ๋ฐœ์ด ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ๋‘ ๋ฒˆ์งธ ์ง€์›์ž๋ถ€ํ„ฐ ๋น„๊ต๋ฅผ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์ด ๋•Œ, ์„œ๋ฅ˜ ์ˆœ์œ„์˜ ๊ฒฝ์šฐ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์ด๋ฏ€๋กœ, ์•„๋ž˜๋กœ ๊ฐˆ์ˆ˜๋ก ๋ฐ€๋ฆฌ๊ฒŒ(๋–จ์–ด์ง€๊ฒŒ) ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ๋น„๊ต๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ, ๊ฐ€์žฅ ์ตœ๊ทผ ์ฑ„์šฉ๋œ ์ง€์›์ž์˜ ๋ฉด์ ‘ ์ˆœ์œ„๋ณด๋‹ค ๋†’์€ ์ง€์›์ž๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค.

 

๋‘ ๋ฒˆ์งธ ์ง€์›์ž์˜ ๊ฒฝ์šฐ, ์ฒซ ๋ฒˆ์งธ ์ง€์›์ž๋ณด๋‹ค ์„œ๋ฅ˜ ์ˆœ์œ„๋„ ๋–จ์–ด์ง€๊ณ  ๋ฉด์ ‘ ์ˆœ์œ„๋„ ๋–จ์–ด์ง„๋‹ค. ๋”ฐ๋ผ์„œ ์„ ๋ฐœ X

์„ธ ๋ฒˆ์งธ ์ง€์›์ž์˜ ๊ฒฝ์šฐ ๋งˆ์ฐฌ๊ฐ€์ง€ ๋‘˜ ๋‹ค ๋–จ์–ด์ง€๋ฏ€๋กœ ์„ ๋ฐœ X

๋„ค ๋ฒˆ์งธ ์ง€์›์ž์˜ ๊ฒฝ์šฐ, ์„œ๋ฅ˜ ์ˆœ์œ„๋Š” ๋–จ์–ด์ง€๋‚˜ ๋ฉด์ ‘ ์ˆœ์œ„์—์„œ ์„ฑ์ ์ด ๋†’์œผ๋ฏ€๋กœ ์„ ๋ฐœ์ด ๋œ๋‹ค.

๋‹ค์„ฏ๋ฒˆ์งธ ์ง€์›์ž์˜ ๊ฒฝ์šฐ, ๋ฉด์ ‘ ์ˆœ์œ„๊ฐ€ ๊ผด์ฐŒ์ด๋ฏ€๋กœ ๋‹น์—ฐํžˆ ์„ ๋ฐœ X

์—ฌ์„ฏ๋ฒˆ์งธ ์ง€์›์ž์˜ ๊ฒฝ์šฐ, ๋ฉด์ ‘ ์ˆœ์œ„๊ฐ€ 1์œ„์ด๋ฏ€๋กœ ์„ ๋ฐœ์ด ๋œ๋‹ค.

๋งˆ์ง€๋ง‰ ์ง€์›์ž์˜ ๊ฒฝ์šฐ, ๋ฉด์ ‘ ์ˆœ์œ„์—์„œ ์ด์ „์— ์ฑ„์šฉ๋œ ๋„ค ๋ฒˆ์งธ, ์—ฌ์„ฏ๋ฒˆ์งธ ์ง€์›์ž๋ณด๋‹ค ๋–จ์–ด์ง€๋ฏ€๋กœ ์„ ๋ฐœ X

 

๋”ฐ๋ผ์„œ ์ด ์ฑ„์šฉ์ž๋Š” 3๋ช…์ด๋‹ค.

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€