Algorithm/์ •์˜ฌ

์ •์˜ฌ 1828๋ฒˆ - ๋ƒ‰์žฅ๊ณ 

giraffe_ 2022. 8. 21. 15:54

http://jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1101&sca=99&sfl=wr_hit&stx=1828 

 

JUNGOL

 

www.jungol.co.kr

 

 

 

 

 

์ฒ˜์Œ์— ๋ฌธ์ œ ์ดํ•ด๋ฅผ ์ž˜ ๋ชปํ–ˆ๋‹ค. ๊ทผ๋ฐ ๋ณด๋ฉด ๋ฐฑ์ค€ ํšŒ์˜์‹ค ๋ฐฐ์ • ๋ฌธ์ œ(https://www.acmicpc.net/problem/1931)์™€ ๊ฑฐ์˜ ๋น„์Šทํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ํšŒ์˜์‹ค ๋ฐฐ์ • ๋ฌธ์ œ ํ’€์ด๋กœ ํ’€์—ˆ๋‹ค.

 

 

 

 

 

1. ๊ฐ ํ™”ํ•™๋ฌผ์งˆ์˜ ์ตœ์ €์˜จ๋„์™€ ์ตœ๊ณ ์˜จ๋„๋ฅผ N*2 ํฌ๊ธฐ์˜ 2์ฐจ์› ๋ฐฐ์—ด์— ์ €์žฅํ–ˆ๋‹ค.

2. ์ตœ๊ณ ์˜จ๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ–ˆ๋‹ค.

3. ์ฒซ ์ตœ๊ณ ์˜จ๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋œ ๋ชจ๋“  ํ™”ํ•™๋ฌผ์งˆ์— ๋Œ€ํ•ด ์ตœ๊ณ ์˜จ๋„๋ณด๋‹ค ๋†’์€ ์ตœ์ €์˜จ๋„๋ฅผ ๊ฐ€์ง„ ํ™”ํ•™๋ฌผ์งˆ์„ ์ฐพ๋Š”๋‹ค

4. ์ฐพ์œผ๋ฉด ์นด์šดํŠธ๋ฅผ ์˜ฌ๋ฆฌ๊ณ , ์ตœ๊ณ  ์˜จ๋„๋ฅผ ๊ฐฑ์‹ ํ•ด์ค€๋‹ค.

 

 

 

 

 

์ฝ”๋“œ

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 NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(br.readLine());
		
		int[][] arr = new int[N][2];
		
		for(int i = 0; i < N; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			
			arr[i][0] = Integer.parseInt(st.nextToken()); //์ตœ์ € ๋ณด๊ด€ ์˜จ๋„
			arr[i][1] = Integer.parseInt(st.nextToken()); //์ตœ๊ณ  ๋ณด๊ด€ ์˜จ๋„
		}
		
		Arrays.sort(arr, new Comparator<int[]>() {
			@Override
			public int compare(int[] o1, int[] o2) {
				if(o1[1] == o2[1]) { //์ตœ๊ณ  ์˜จ๋„ ๊ฐ™์œผ๋ฉด
					return o1[0] - o2[0]; //์ตœ์ € ์˜จ๋„ ์˜ค๋ฆ„ ์ฐจ์ˆœ
				}else {
					return o1[1] - o2[1]; //์ตœ๊ณ  ์˜จ๋„ ์˜ค๋ฆ„ ์ฐจ์ˆœ
				}	
			}
		});

		int count = 1;
		int high = arr[0][1]; //์ตœ๊ณ  ์˜จ๋„๊ฐ€ ๊ธฐ์ค€
		for(int i = 1; i < N; i++) {
			if(arr[i][0] > high) {
				count++;
				high = arr[i][1];
			}
		}
		
		System.out.println(count);
	}

}

 

 

 

 

 

 

๊ฒฐ๊ณผ

 

 

 

 

 

๋ฒˆ์™ธ - ์ฒ˜์Œ ์‹คํŒจํ•œ ์ฝ”๋“œ

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 NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(br.readLine());
		
		int[][] arr = new int[N][2];
		
		for(int i = 0; i < N; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			
			arr[i][0] = Integer.parseInt(st.nextToken()); //์ตœ์ € ๋ณด๊ด€ ์˜จ๋„
			arr[i][1] = Integer.parseInt(st.nextToken()); //์ตœ๊ณ  ๋ณด๊ด€ ์˜จ๋„
		}
		
		Arrays.sort(arr, new Comparator<int[]>() {
			@Override
			public int compare(int[] o1, int[] o2) {
				if(o1[1] == o2[1]) { //์ตœ๊ณ  ์˜จ๋„ ๊ฐ™์œผ๋ฉด
					return o1[0] - o2[0]; //์ตœ์ € ์˜จ๋„ ์˜ค๋ฆ„ ์ฐจ์ˆœ
				}else {
					return o1[1] - o2[1]; //์ตœ๊ณ  ์˜จ๋„ ์˜ค๋ฆ„ ์ฐจ์ˆœ
				}	
			}
		});

		int count = 0;
		int high = -271; //์ตœ๊ณ  ์˜จ๋„๊ฐ€ ๊ธฐ์ค€
		for(int i = 0; i < N; i++) {
			if(arr[i][0] >= high) {
				count++;
				high = arr[i][1];
			}
		}
		
		System.out.println(count);
	}

}

 

 

์ตœ๊ณ  ์˜จ๋„๋ฅผ ๋ฌธ์ œ์—์„œ ์ œ์‹œํ•œ ์ตœ์ €๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๊ณ , ๋ฐฐ์—ด์˜ 0๋ฒˆ์งธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ๋Œ๋ ธ๋‹ค. ํ•˜์ง€๋งŒ ๋ชจ๋“  ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๊ธฐ์ค€์„ 0๋ฒˆ์งธ์˜ ์ตœ๊ณ ์˜จ๋„๋กœ ์„ค์ •ํ•˜๊ณ  ํ•˜๊ณ , ๋ฐฐ์—ด์˜ 1๋ฒˆ์งธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ๋Œ๋ฆฌ๋‹ˆ ๋œ๋‹ค.