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

[๋ฐฑ์ค€] 2246๋ฒˆ: ์ฝ˜๋„ ์„ ์ •(๊ตฌํ˜„)

by ์ฃผ๋ฐœ2 2020. 4. 9.
๋ฐ˜์‘ํ˜•

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

 

2246๋ฒˆ: ์ฝ˜๋„ ์„ ์ •

๋ฌธ์ œ ์ฝ˜๋„๋ฅผ ์„ ์ •ํ•  ๋•Œ์—๋Š” ๊ฐ€๊ธ‰์ ์ด๋ฉด ์‹ธ๊ณ  ๋ฐ”๋‹ท๊ฐ€์— ๊ฐ€๊นŒ์šด ๊ณณ์œผ๋กœ ํ•˜๋ ค ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์šฐ์„  ์ ๋‹นํ•œ ์ฝ˜๋„ ๋ช‡ ๊ณณ์„ ํ›„๋ณด๋กœ ์„ ์ •ํ•˜๋ ค ํ•˜๋Š”๋ฐ, ๋‹ค์Œ ๋‘ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ฝ˜๋„ X๊ฐ€ ํ›„๋ณด๊ฐ€ ๋œ๋‹ค. X๋ณด๋‹ค ๋ฐ”๋‹ท๊ฐ€์— ๋” ๊ฐ€๊นŒ์šด ์ฝ˜๋„๋“ค์€ ๋ชจ๋‘ X๋ณด๋‹ค ์ˆ™๋ฐ•๋น„๊ฐ€ ๋” ๋น„์‹ธ๋‹ค. X๋ณด๋‹ค ์ˆ™๋ฐ•๋น„๊ฐ€ ๋” ์‹ผ ์ฝ˜๋„๋“ค์€ ๋ชจ๋‘ X๋ณด๋‹ค ๋ฐ”๋‹ท๊ฐ€์—์„œ ๋” ๋ฉ€๋‹ค. ๊ฐ ์ฝ˜๋„์˜ ๋ฐ”๋‹ท๊ฐ€์—์„œ์˜ ๊ฑฐ๋ฆฌ์™€ ์ˆ™๋ฐ•๋น„์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ํ›„๋ณด ์ฝ˜๋„์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ž…๋ ฅ ์ฒซ์งธ ์ค„

www.acmicpc.net

์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;
		
		int N = Integer.parseInt(bf.readLine()); // ์ฝ˜๋„์˜ ๊ฐฏ์ˆ˜
		int[][] arr = new int[N][2];
		for(int i=0; i<N; i++) {
			st = new StringTokenizer(bf.readLine());
			arr[i][0] = Integer.parseInt(st.nextToken());	// ๋ฐ”๋‹ท๊ฐ€๋กœ๋ถ€ํ„ฐ ๊ฑฐ๋ฆฌ
			arr[i][1] = Integer.parseInt(st.nextToken());	// ์ˆ™๋ฐ•๋น„
		}
		
		int count = 0;	// ํ›„๋ณด ์ฝ˜๋„์˜ ๊ฐฏ์ˆ˜
		
		/* 
		 * ์กฐ๊ฑด 1) X๋ณด๋‹ค ๊ฐ€๊นŒ์šฐ๋ฉด X๋ณด๋‹ค ์ˆ™๋ฐ•๋น„๊ฐ€ ๋” ๋น„์‹ธ๋‹ค
		 * ์กฐ๊ฑด 2) X๋ณด๋‹ค ์ˆ™๋ฐ•๋น„๊ฐ€ ๋น„์‹ธ๋ฉด X๋ณด๋‹ค ๋” ๋ฉ€๋‹ค. 
		 */
		for(int i=0; i<N; i++) {
			boolean flag = true;
			for(int j=0; j<N; j++) {
				
				// ์ž๊ธฐ ์ž์‹ ์€ ๋น„๊ต X
				if(i == j)
					continue;
				
				if(arr[i][0] >= arr[j][0]) {	 // i๋ฒˆ์งธ๋ฅผ X๋ผ๊ณ  ํŒ๋‹จํ• ๋•Œ, X๋ณด๋‹ค ๋” ๊ฐ€๊นŒ์šธ๋•Œ
					if(arr[i][1] >= arr[j][1]) { // X๊ฐ€ ๋” ๋ฉ€๋ฆฌ์žˆ๋Š”๋ฐ X๊ฐ€ ์ˆ™๋ฐ•๋น„๊ฐ€ ๋” ๋น„์Œ€๋•Œ
						flag = false;
						continue;
					}
				}
				
				if(arr[i][1] >= arr[j][1]) {	 // X๋ณด๋‹ค ์ˆ™๋ฐ•๋น„๊ฐ€ ์ €๋ ดํ• ๋•Œ
					if(arr[i][0] >= arr[j][0]) { // X๋ณด๋‹ค ์ €๋ ดํ•œ๋ฐ X๋ณด๋‹ค ๊ฐ€๊นŒ์ด ์žˆ์„๋•Œ 
						flag = false;
						continue;
					}
				}
			}
			if(flag)
				count ++;
		}
		
		bw.write(count + "\n");
		bw.flush();
		bf.close();
		bw.close();
	}

}

ํ’€์ด

๋ญ”๊ฐ€ ํ—ท๊ฐˆ๋ ธ๋Š”๋ฐ ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ์กฐ๊ฑด 2๊ฐ€์ง€ ๋ชจ๋‘ ์†ํ• ๋•Œ, ์ฝ˜๋„ X๋Š” ํ›„๋ณด๊ฐ€ ๋œ๋‹ค.

  1. X๋ณด๋‹ค ๋ฐ”๋‹ท๊ฐ€์— ๋” ๊ฐ€๊นŒ์šด ์ฝ˜๋„๋“ค์€ ๋ชจ๋‘ X๋ณด๋‹ค ์ˆ™๋ฐ•๋น„๊ฐ€ ๋” ๋น„์‹ธ๋‹ค.

  2. X๋ณด๋‹ค ์ˆ™๋ฐ•๋น„๊ฐ€ ๋” ์‹ผ ์ฝ˜๋„๋“ค์€ ๋ชจ๋‘ X๋ณด๋‹ค ๋ฐ”๋‹ท๊ฐ€์—์„œ ๋” ๋ฉ€๋‹ค.

N์˜ ์ตœ๋Œ€๋ฒ”์œ„๊ฐ€ 10,000 ์ด๋ฏ€๋กœ ์™„์ „ ํƒ์ƒ‰์œผ๋กœ ํ•ด๋„ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„๊ฑฐ๋ผ ์ƒ๊ฐํ•˜๊ณ  ์™„์ „ ํƒ์ƒ‰์œผ๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค.

O(N^2)

 

ํ’€์ด๋Š” ๋ชจ๋“  ์ฝ˜๋„๋“ค์„ ํƒ์ƒ‰ํ•˜๋ฉด์„œ X๋ณด๋‹ค ๋” ๊ฐ€๊นŒ์šด ์ฝ˜๋„์ง€๋งŒ X๋ณด๋‹ค ์ˆ™๋ฐ•๋น„๊ฐ€ ๋” ์ €๋ ดํ• ๊ฒฝ์šฐ

 -> 1๋ฒˆ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ flag = false

 

๋˜ํ•œ ๋ชจ๋“  ์ฝ˜๋„๋“ค์„ ํƒ์ƒ‰ํ•˜๋ฉด์„œ X๋ณด๋‹ค ์ˆ™๋ฐ•๋น„๊ฐ€ ์ €๋ ดํ•œ๋ฐ X๋ณด๋‹ค ๊ฐ€๊นŒ์šด๊ฒฝ์šฐ

 -> 2๋ฒˆ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ flag = false

 

์œ„ ์กฐ๊ฑด์„ ํ†ตํ•ด flag ๊ฐ’์ด true๋ฉด ํ›„๋ณด ์ฝ˜๋„์ด๋ฏ€๋กœ +1์”ฉ ํ•ด์ค€๋‹ค.

 

์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜๊ฑธ๋ ค์„œ ๋‹ค๋ฅธ ์ •๋‹ต ์ฝ”๋“œ๋“ค์„ ๋ณด๋ฉด์„œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ๋‹ค๋ฅธ ์ฝ˜๋„๋“ค๊ณผ ๋น„๊ตํ•˜๋ฉด์„œ 1๋ฒˆ ์กฐ๊ฑด์ด๋‚˜ 2๋ฒˆ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š”๊ฒฝ์šฐ, ๋‹ค๋ฅธ ์ฝ˜๋„๋“ค์€ ๋ณผ ํ•„์š”๋„ ์—†์ด ๊ทธ ์ฝ˜๋„๋“ค์€ ํ›„๋ณด ์ฝ˜๋„์—์„œ ์ œ์™ธ๋œ๋‹ค.

๋”ฐ๋ผ์„œ continue๊ฐ€ ์•„๋‹Œ break๋ฅผ ํ†ตํ•ด ์ œ์ถœํ•˜๋‹ˆ 2๋ฐฐ ๊ฐ€๋Ÿ‰ ์‹œ๊ฐ„์ด ์ค„์–ด๋“ค์—ˆ๋‹ค.

				if(arr[i][0] >= arr[j][0]) {	 // i๋ฒˆ์งธ๋ฅผ X๋ผ๊ณ  ํŒ๋‹จํ• ๋•Œ, X๋ณด๋‹ค ๋” ๊ฐ€๊นŒ์šธ๋•Œ
					if(arr[i][1] >= arr[j][1]) { // X๊ฐ€ ๋” ๋ฉ€๋ฆฌ์žˆ๋Š”๋ฐ X๊ฐ€ ์ˆ™๋ฐ•๋น„๊ฐ€ ๋” ๋น„์Œ€๋•Œ
						flag = false;
                        			// continue;
						break;
					}
				}
				
				if(arr[i][1] >= arr[j][1]) {	 // X๋ณด๋‹ค ์ˆ™๋ฐ•๋น„๊ฐ€ ์ €๋ ดํ• ๋•Œ
					if(arr[i][0] >= arr[j][0]) { // X๋ณด๋‹ค ์ €๋ ดํ•œ๋ฐ X๋ณด๋‹ค ๊ฐ€๊นŒ์ด ์žˆ์„๋•Œ 
						flag = false;
                        			// continue;
						break;
					}
				}

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€