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

[๋ฐฑ์ค€] 9576๋ฒˆ: ์ฑ… ๋‚˜๋ˆ ์ฃผ๊ธฐ(๊ทธ๋ฆฌ๋””)

by ์ฃผ๋ฐœ2 2020. 3. 31.
๋ฐ˜์‘ํ˜•

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

 

9576๋ฒˆ: ์ฑ… ๋‚˜๋ˆ ์ฃผ๊ธฐ

๋ฐฑ์ค€์ด๋Š” ๋ฐฉ ์ฒญ์†Œ๋ฅผ ํ•˜๋ฉด์„œ ํ•„์š” ์—†๋Š” ์ „๊ณต ์„œ์ ์„ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋‚˜๋ˆ ์ฃผ๋ ค๊ณ  ํ•œ๋‹ค. ๋‚˜๋ˆ ์ค„ ์ฑ…์„ ๋ชจ์•„๋ณด๋‹ˆ ์ด N๊ถŒ์ด์—ˆ๋‹ค. ์ฑ…์ด ๋„ˆ๋ฌด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฑ์ค€์ด๋Š” ์ฑ…์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ๊ฐ 1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ์ •์ˆ˜ ๋ฒˆํ˜ธ๋ฅผ ์ค‘๋ณต๋˜์ง€ ์•Š๊ฒŒ ๋งค๊ฒจ ๋‘์—ˆ๋‹ค. ์กฐ์‚ฌ๋ฅผ ํ•ด ๋ณด๋‹ˆ ์ฑ…์„ ์›ํ•˜๋Š” ์„œ๊ฐ•๋Œ€ํ•™๊ต ํ•™๋ถ€์ƒ์ด ์ด M๋ช…์ด์—ˆ๋‹ค. ๋ฐฑ์ค€์ด๋Š” ์ด M๋ช…์—๊ฒŒ ์‹ ์ฒญ์„œ์— ๋‘ ์ •์ˆ˜ a, b (1 ≤ a ≤ b ≤ N)๋ฅผ ์ ์–ด ๋‚ด๋ผ๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฐฑ์ค€์ด๋Š” ์ฑ… ๋ฒˆํ˜ธ๊ฐ€ a ์ด์ƒ b ์ดํ•˜์ธ ์ฑ… ์ค‘ ๋‚จ์•„์žˆ๋Š” ์ฑ…

www.acmicpc.net

์ฝ”๋“œ

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 bf = new BufferedReader(new InputStreamReader(System.in));
		int t = Integer.parseInt(bf.readLine());
		StringTokenizer st;
		for(int tc=0; tc<t; tc++) {
			st = new StringTokenizer(bf.readLine());
			int N = Integer.parseInt(st.nextToken());	// ์ฑ… ์ˆ˜๋Ÿ‰
			int M = Integer.parseInt(st.nextToken());	// ๋‚˜๋ˆ ์ค„ ํ•™์ƒ ์ˆ˜
			boolean[] checkBook = new boolean[N+1];		// ์ฑ… ๋‚˜๋ˆ ์คฌ๋Š”์ง€ ์ฒดํฌ
			int[][] arr = new int[M][2];	// a, b ์›ํ•˜๋Š” ํ•™์ƒ์ด ์ฑ…
			int count = 0;	// ์ฑ…์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํ•™์ƒ์ˆ˜
			
			for(int i=0; i<M; i++) {
				st = new StringTokenizer(bf.readLine());
				arr[i][0] = Integer.parseInt(st.nextToken());
				arr[i][1] = Integer.parseInt(st.nextToken());
			}
			
			// b ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ
			Arrays.sort(arr, new Comparator<int[] >() {
				@Override
				public int compare(int[] o1, int[] o2) {
					return Integer.compare(o1[1], o2[1]);
				}
			});
			
			// ์ •๋ ฌ๋œ ๊ธฐ์ค€์œผ๋กœ ์ฑ… ๋นŒ๋ ค์ฃผ๊ธฐ.
			for(int i=0; i<M; i++) {
				// a(arr[i][0]) ~ b(arr[i][1])๊นŒ์ง€ ๊ฒ€์ƒ‰
				for(int j=arr[i][0]; j<=arr[i][1]; j++) {
					// ์ฑ…์„ ๋Œ€์—ฌํ•ด์ค„  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์ด๋ฉด ๋นŒ๋ ค์ฃผ๊ณ  ์ฒดํฌํ•œ๋‹ค.
					if(!checkBook[j]) {
						count ++;
						checkBook[j] = true;
						break;
					}
				}
			}
			System.out.println(count);
		}
		bf.close();
	}

}

ํ’€์ด

๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ถ„๋ฅ˜๋˜์–ด ์žˆ์–ด์„œ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ํ’€์–ด๋ณด๋ ค๊ณ  ํ—€๋Š”๋ฐ ์ด๋ถ„๋งค์นญ, ๋„คํŠธ์›Œํฌ ํ”Œ๋กœ์šฐ? ๋“ฑ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ์žˆ์–ด์„œ ๋‚œ์ด๋„๊ฐ€ ๋†’๊ฒŒ ์ฑ…์ •๋˜์–ด์žˆ๋Š” ๊ฒƒ ๊ฐ™์•˜๋‹ค.

๋ฌธ์ œ๊ฐ€ 2์ฐจ์› ๋ฐฐ์—ด์— ํ•™์ƒ์—๊ฒŒ ๋‚˜๋ˆ ์ค„ ์ˆ˜ ์žˆ๋Š” ์ฑ…์˜ ์ตœ๋Œ€ ๊ฐฏ์ˆ˜, ๋ญ”๊ฐ€ ๋”ฑ ๊ทธ๋ฆฌ๋”” + ์ •๋ ฌ๋กœ ํ’€๋ฆด ๊ฒƒ ๊ฐ™์•„์„œ ์ •๋ ฌ์„ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ์ง€ ๊ณ ๋ฏผํ–ˆ๋‹ค.

a์ด์ƒ b์ดํ•˜์ธ ์ฑ… ์ค‘ ๋‚จ์•„์žˆ๋Š” ์ฑ… ํ•œ๊ถŒ์„ ๊ณจ๋ผ ํ•™์ƒ์—๊ฒŒ ๋‚˜๋ˆ„์–ด์ค€๋‹ค.

๊ทธ๋Ÿผ a๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ• ์ง€, b๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ• ์ง€, ์˜ค๋ฆ„์ฐจ์ˆœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ• ์ง€๋ฅผ ์ƒ๊ฐํ•ด๋ณด์•˜๋‹ค.

a๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค๋ฉด ์ฑ…์„ ์ตœ๋Œ€๋กœ ๋‚˜๋ˆ ์ค„ ์ˆ˜ ์—†๋Š”๋ฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐ˜๋ก€๊ฐ€ ์žˆ๋‹ค.

 

a b= 1 5

a b= 2 2

a b= 1 5

์œ„์˜ ์ˆ˜๋ฅผ a๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๋ฉด

1 5

1 5 

2 2

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋˜๊ณ , ์ˆœ์„œ๋Œ€๋กœ ํ•œ๊ถŒ์”ฉ ๋‚˜๋ˆ ์ค€๋‹ค๊ณ  ํ•˜๋ฉด ๊ฐ๊ฐ 1, 2 ์ฑ…์„ ๋‚˜๋ˆ ์ฃผ๊ณ , ๋งˆ์ง€๋ง‰ ํ•™์ƒ์—๊ฒŒ๋Š” ์ฑ…์„ ๋‚˜๋ˆ ์ค„ ์ˆ˜ ์—†๋‹ค.

ํ•˜์ง€๋งŒ ๋งˆ์ง€๋ง‰  ํ•™์ƒ์—๊ฒŒ 2, ์ฒซ๋ฒˆ์งธ ๋‘๋ฒˆ์งธ ํ•™์ƒ์—๊ฒŒ 1, 3 ์„๋‚˜๋ˆ ์ฃผ๋ฉด ์ฑ…์„ ์ „๋ถ€ ๋‚˜๋ˆ ์ค„ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

 

๋”ฐ๋ผ์„œ b๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ๋‹ค.

์œ„์˜ ์ˆ˜๋ฅผ b๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๋ฉด

2 2

1 5

1 5

์™€ ๊ฐ™์ด ๋˜๊ณ , ๋ฐ˜๋ก€๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ณ  ์ฑ…์„ ์ตœ๋Œ€๋กœ ๋‚˜๋ˆ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€