๐ 1. ๋ฌธ์ ์ค๋ช
์
์ถ๋ ฅ ์ ์ค๋ช
๐ก 2. ์ ๊ทผ๋ฐฉ์
์ด ๋ฌธ์ ๋ ์ ๋ฒ์ ํ์๋ ๋จ์์นด๋ฉ๋ผ ๋ฌธ์ ์ ๋น์ทํ๋ค.
์์ ๊ทธ๋ํ๋ ๊ฐ ๋ฏธ์ฌ์ผ์ ๋์ e ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ํจ ๋ชจ์์ด๋ค.
๊ทธ๋ํ์์ (3,7)์ (4,8)์ ์์๊ฐ ์๋ชป๋์๋๋ฐ ์ค๋ฅ๋ก ์ถ์ ๋๋ค.
๋จ์์นด๋ฉ๋ผ ๋ฌธ์ ์ ์๊ฒฉ์์คํ
๋ฌธ์ ์ ์ฐจ์ด๋ ๋์ ํฌํจ ์ฌ๋ถ์ด๊ณ ๋ ๋ค ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด๊ฒฐํ๋ฉด ๋๋ค.
๋ฌธ์ ํ์ด ๋ฐฉ๋ฒ
- ๋ฐฐ์ด์ ๋์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
- ๊ฐ ๋ฏธ์ฌ์ผ์ ์์์ (s)์ ์๊ฒฉ ๋ฏธ์ฌ์ผ ์์น์ ๋น๊ต
- - ์์์ ์ด ์๊ฒฉ ๋ฏธ์ฌ์ผ ์์น ์ด์์ด๋ฉด, ์๋ก์ด ์๊ฒฉ ๋ฏธ์ฌ์ผ์ ๋ฐ์ฌ
- - ์๊ฒฉ ๋ฏธ์ฌ์ผ ์์น๋ฅผ ํด๋น ๋ฏธ์ฌ์ผ์ ๋์ (e)์ผ๋ก ์ ๋ฐ์ดํธ
- ๋ชจ๋ ๋ฏธ์ฌ์ผ์ ๋ํด ์ ๊ณผ์ ๋ฐ๋ณต
๐ ๊ฐ๊ตฌ๊ฐ (s, e)์ด๋ฏ๋ก ๋ค์ ๋ฏธ์ฌ์ผ์ ์์์ ์ด ํ์ฌ ์๊ฒฉ ๋ฏธ์ฌ์ผ ์์น ์ด์์ด๋ฉด ์๋ก์ด ์๊ฒฉ ๋ฏธ์ฌ์ผ ์ถ๊ฐ
(ํ๊ตฌ๊ฐ (s, e]์ด๋ผ๋ฉด ์ด๊ณผ์ผ ๋๋ง ์ถ๊ฐ)
โญ 3. ์ ๋ต์ฝ๋ (๋ด ์ฝ๋)
import java.util.*;
class Solution {
public int solution(int[][] targets) {
int answer = 0;
Arrays.sort(targets, (o1, o2) -> o1[1] - o2[1]);
int endpoint = 0;
for (int i = 0; i < targets.length; i++) {
if(endpoint <= targets[i][0]) {
endpoint = targets[i][1];
answer++;
}
}
return answer;
}
}
๐๐ป ๋ ์ข์ ์ฝ๋
- ์๋ฐ์์ ์ ์(int) ์ฐ์ฐ๋ง ์ฌ์ฉํ๋ฉด ๊ฐ๊ตฌ๊ฐ์ ๊ณ ๋ คํ๊ธฐ ์ด๋ ต๋ค.
๐ก ๊ฐ๊ตฌ๊ฐ
๊ฐ ๋ฏธ์ฌ์ผ์ (s, e) ๋ก ํํ๋๋ฉฐ, ์ด๋ "s๋ณด๋ค ํฌ๊ณ e๋ณด๋ค ์์" ๊ตฌ๊ฐ์ด๋ค.
์ด๊ฒ ๋ฌด์จ ๋ง์ด๋๋ฉด e ์์น์์ ๋ฏธ์ฌ์ผ์ ๋ฐ์ฌํ๋ฉด ํด๋น ๋ฏธ์ฌ์ผ์ ์๊ฒฉํ ์ ์๋ค๋ ๋ป์ด๋ค.
์ฆ, s โค x < e ๋ฒ์์์๋ ์๊ฒฉํ ์ ์์ง๋ง x == e ์์น์์๋ ์๊ฒฉํ ์ ์๋ค.
import java.util.*;
class Solution {
public int solution(int[][] targets) {
int answer = 0;
// ํญ๊ฒฉ ๋ฏธ์ฌ์ผ ๊ตฌ๊ฐ์ ๋ ์ ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
Arrays.sort(targets, (a, b) -> Integer.compare(a[1], b[1]));
// ๋ง์ง๋ง์ผ๋ก ๋ฐ์ฌ๋ ์๊ฒฉ ๋ฏธ์ฌ์ผ์ x ์ขํ
double lastIntercept = -1.0;
for (int[] target : targets) {
// ๋ง์ฝ ํ์ฌ ํญ๊ฒฉ ๋ฏธ์ฌ์ผ์ ๊ตฌ๊ฐ์ ์๊ฒฉ ๋ฏธ์ฌ์ผ์ด ํฌํจ๋์ง ์์ผ๋ฉด
if (lastIntercept < target[0]) {
// ์๋ก์ด ์๊ฒฉ ๋ฏธ์ฌ์ผ์ ๋ฐ์ฌ
lastIntercept = target[1] - 0.000000001; // ๋ ์ ์์ ๋ฐ๋ก ์์ ์ค์ ์์น์ ๋ฐ์ฌ
answer++;
}
}
return answer;
}
}
โญ ์๊ฒฉ ๋ฏธ์ฌ์ผ ๋ฐ์ฌ ์์น
1๏ธโฃ x = 4 - 0.000000001
2๏ธโฃ x = 12 - 0.000000001
3๏ธโฃ x = 14 - 0.000000001
์๋ฅผ ๋ค์ด ์๋์ ๊ฐ์ ๋ฏธ์ฌ์ผ ๋ชฉ๋ก์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด์.
targets = [[4, 8], [10, 14], [11, 13]]
๊ฐ ๊ตฌ๊ฐ์ ์์ง์ ์ ๋ํ๋ด๋ฉด ์๋์ ๊ฐ์ ๋ชจ์ต์ด ๋ ๊ฒ์ด๋ค.
4 ------------- 8
10 ------------- 14
11 ------ 13
์ฌ๊ธฐ์ [10, 14] ์ [11, 13] ์ ๊ฒน์ณ ์๊ธฐ ๋๋ฌธ์, 11 <= x < 13 ๊ตฌ๊ฐ์์ ๋ฏธ์ฌ์ผ์ ๋ฐ์ฌํ๋ฉด ๋ ๊ฐ๋ฅผ ๋์์ ์๊ฒฉํ ์ ์๋ค.
ํ์ง๋ง x = 13 ์์ ์๊ฒฉํ๋ฉด [11, 13] ๋ฏธ์ฌ์ผ์ ์๊ฒฉํ ์ ์๋ค. ๋ฏธ์ฌ์ผ์ 13 ์์น์ ๋จ์ด์ง๊ธฐ ๋๋ฌธ์ด๋ค.
โญ ๋ฐ๋ผ์ ๋์ ๋ฐ๋ก ์์ ์ค์ ์์น์์ ์๊ฒฉ ๋ฏธ์ฌ์ผ์ ๋ฐ์ฌํ๋ ์ฝ๋๋ฅผ ์ฐ๋ฉด target[1]๋ณด๋ค ์์ฃผ ์กฐ๊ธ ์ ์์น์์ ๋ฐ์ฌ๋๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ ๋ชจ๋ ๋ฏธ์ฌ์ผ์ด (s, e) ๋ฒ์ ๋ด์์ ์ ์์ ์ผ๋ก ์๊ฒฉ๋ ์ ์๋ค.
double lastIntercept = target[1] - 0.000000001; // ๋ ์ ๋ณด๋ค ์์ฃผ ์ฝ๊ฐ ์์ ์์น์์ ๋ฐ์ฌ