ํ ๊ฐ์ ํ์์ค์ด ์๋๋ฐ ์ด๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ N๊ฐ์ ํ์์ ๋ํ์ฌ ํ์์ค ์ฌ์ฉํ๋ฅผ ๋ง๋ค๋ ค๊ณ ํ๋ค. ๊ฐ ํ์ I์ ๋ํด ์์์๊ฐ๊ณผ ๋๋๋ ์๊ฐ์ด ์ฃผ์ด์ ธ ์๊ณ , ๊ฐ ํ์๊ฐ ๊ฒน์น์ง ์๊ฒ ํ๋ฉด์ ํ์์ค์ ์ฌ์ฉํ ์ ์๋ ํ์์ ์ต๋ ๊ฐ์๋ฅผ ์ฐพ์๋ณด์. ๋จ, ํ์๋ ํ๋ฒ ์์ํ๋ฉด ์ค๊ฐ์ ์ค๋จ๋ ์ ์์ผ๋ฉฐ ํ ํ์๊ฐ ๋๋๋ ๊ฒ๊ณผ ๋์์ ๋ค์ ํ์๊ฐ ์์๋ ์ ์๋ค. ํ์์ ์์์๊ฐ๊ณผ ๋๋๋ ์๊ฐ์ด ๊ฐ์ ์๋ ์๋ค. ์ด ๊ฒฝ์ฐ์๋ ์์ํ์๋ง์ ๋๋๋ ๊ฒ์ผ๋ก ์๊ฐํ๋ฉด ๋๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ์์ ์ N(1 โค N โค 100,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N+1 ์ค๊น์ง ๊ฐ ํ์์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋๋ฐ ์ด๊ฒ์ ๊ณต๋ฐฑ์ ์ฌ์ด์ ๋๊ณ ํ์์ ์์์๊ฐ๊ณผ ๋๋๋ ์๊ฐ์ด ์ฃผ์ด์ง๋ค. ์์ ์๊ฐ๊ณผ ๋๋๋ ์๊ฐ์ 231-1๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์ ๋๋ 0์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ต๋ ์ฌ์ฉํ ์ ์๋ ํ์์ ์ต๋ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
1) ์๋ก ๊ฒน์น์ง ์์ผ๋ฉด์, ์ข
๋ฃ์๊ฐ์ด ๊ฐ์ฅ ๋น ๋ฅธ ๊ฒ์ ์ ํ
2) end๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
3) start ์๊ฐ์ด ์ด์ ์ end๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด end์ ์ง๊ธ end๋ฅผ ๋ฃ๊ธฐ
1) end๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
Arrays.sort(arr, new Comparator<int []>() {
@Override
public int compare(int[] a, int[] b) {
if(a[1] == b[1])
return a[0]-b[0];
else
return a[1]-b[1];
}
});
2) start ์๊ฐ์ด ์ด์ ์ end๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด end์ ์ง๊ธ end๋ฅผ ๋ฃ๊ธฐ
for(int i=0; i<n; i++) {
if(arr[i][0] >= end) {
end = arr[i][1];
count++;
}
}
import java.io.*;
import java.util.*;
public class Greedy_4 {
public static void main(String[] args) throws Exception {
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++) {
String s[] = br.readLine().split(" ");
arr[i][0] = Integer.parseInt(s[0]);
arr[i][1] = Integer.parseInt(s[1]);
}
Arrays.sort(arr, new Comparator<int []>() {
@Override
public int compare(int[] a, int[] b) {
if(a[1] == b[1])
return a[0]-b[0];
else
return a[1]-b[1];
}
});
int count = 0;
int end = -1;
for(int i=0; i<n; i++) {
if(arr[i][0] >= end) {
end = arr[i][1];
count++;
}
}
System.out.println(count);
}
}
์ฑ๊ณต~