๐ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก์ Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๐ ๋ฌธ์ ์์ฝ

1๏ธโฃ 2์ฐจ์ ํ๋ฉด์์ ์ฌ๋ฌ ๊ฐ์ ํญ๊ฒฉ ๋ฏธ์ฌ์ผ์ด (s, e)์ x์ถ ๊ฐ๊ตฌ๊ฐ์ผ๋ก ๋ ์์จ๋ค.
2๏ธโฃ B๊ตญ์ ํน์ x ์ขํ์์ ์๊ฒฉ ๋ฏธ์ฌ์ผ์ ์ด์ ํด๋น x์ขํ๋ฅผ ํฌํจํ๋ ๋ชจ๋ ๋ฏธ์ฌ์ผ์ ํ ๋ฒ์ ์๊ฒฉํ ์ ์๋ค.
3๏ธโฃ ๋จ, s์ e ์์น์์ ์๋ ๊ฒ์ ์๊ฒฉ์ผ๋ก ์ธ์ ๋์ง ์์ผ๋ฉฐ, (s < x < e) ์์ ์ค์ ์ขํ์ฌ์ผ ํ๋ค.
4๏ธโฃ ๋ชจ๋ ํญ๊ฒฉ ๋ฏธ์ฌ์ผ์ ์ต์ํ์ ์๊ฒฉ ๋ฏธ์ฌ์ผ๋ก ๋ฐฉ์ดํด์ผ ๋๋ค.
โ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ
์ฒ์ ์ด ๋ฌธ์ ๋ฅผ ๋ณด๊ณ , ์ ์ผ ์ค์ํ ๊ฑด ๋ฏธ์ฌ์ผ์ ๊ฐ์๋ฅผ ์ค์ด๊ธฐ ์ํ ์ต์ ์ ํ์ด๋ฐ์ด๋ผ๊ณ ์๊ฐํ๋ค.
ํญ๊ฒฉ ๋ฏธ์ฌ์ผ ๊ตฌ๊ฐ (s, e)๋ฅผ ๋ณด๋ฉด, ์ด๋ ์ด๋ค ์ฐ์๋ ๋ฒ์๋ฅผ ์๋ฏธํ๊ณ ,
์ฐ๋ฆฌ๋ ๊ทธ ๊ตฌ๊ฐ์ ํ ์ ์ผ๋ก ์ปค๋ฒํ ์ ์๋ค๋ ์ ์์ ํ๋ ์ ํ ๋ฌธ์ (Interval Scheduling Problem)์ ์ ์ฌํ๋ค๊ณ ์๊ฐํ๋ค.
๋ฐ๋ผ์, ์ด ๋ฌธ์ ๋ ์ ํ์ ์ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ ๊ทผํ ์ ์์ ๊ฒ์ด๋ค.
๐ง ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ์ ์ฉ ๋ฐฉ์
ํต์ฌ ์์ด๋์ด๋ ์๋์ ๋ ๊ฐ์ด๋ค.
1๏ธโฃ ๊ฐ๋ฅํ ํ ๋ง์ ๋ฏธ์ฌ์ผ์ ํ ๋ฒ์ ์๊ฒฉํ๊ธฐ ์ํด์๋ ๋๋๋ ์ง์ ์ด ๊ฐ์ฅ ๋น ๋ฅธ ๋ฏธ์ฌ์ผ์ ๊ธฐ์ค์ผ๋ก ์๋ ๊ฒ์ด ์ ๋ฆฌํ๋ค.
2๏ธโฃ ์ ๋ ฌ ๊ธฐ์ค์ ๋์ ๊ธฐ์ค ์ค๋ฆ์ฐจ์์ผ๋ก ํ๋ฉด, ๊ฐ์ฅ ๋จผ์ ๋๋๋ ๊ตฌ๊ฐ๋ถํฐ ํ์ํ ์ ์์ ๊ฒ์ด๋ค.
Arrays.sort(targets, (o1, o2) -> o1[1] - o2[1]);
๐ ์ต์ข ์ฝ๋
class Solution {
public int solution(int[][] targets) {
Arrays.sort(targets, (o1, o2) -> o1[1] - o2[1]); // ๋์ ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
int currEnd = -1; // ํ์ฌ ์๊ฒฉ ๋ฏธ์ฌ์ผ์ด ์ปค๋ฒํ๋ ๋์
int answer = 0; // ์๊ฒฉ ๋ฏธ์ฌ์ผ์ ์
for(int[] t: targets){
if(currEnd == -1){ // ์ฒซ ๋ฏธ์ฌ์ผ์ธ ๊ฒฝ์ฐ
answer++;
currEnd = t[1];
continue;
}
if(t[0] < currEnd){
// ํ์ฌ ์๊ฒฉ์ผ๋ก ์ปค๋ฒ ๊ฐ๋ฅํ๋ฏ๋ก ๊ฑด๋๋
continue;
}
// ์ปค๋ฒํ ์ ์๋ ๊ฒฝ์ฐ ์๋ก์ด ์๊ฒฉ ๋ฏธ์ฌ์ผ ๋ฐ์ฌ
answer++;
currEnd = t[1];
}
return answer;
}
}
๐ฉ๐ป๐ป ์คํ ํ๋ฆ ์์
[[4,5],[4,8],[10,14],[11,13],[5,12],[3,7],[1,4]]
ํ๋ก๊ทธ๋๋จธ์ค์ ์๋ ์์๋ฅผ ์ด์ฉํด์ ๋ถ์ํด๋ณด๋ฉด ์๋์ ๊ฐ์ ํ๋ฆ์ผ๋ก ๋์ํ๋ค.
1๏ธโฃ ๋์ ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค. ๐๐ป [[1,4],[4,5],[3,7],[4,8],[5,12],[11,13],[10,14]]
2๏ธโฃ ์ฒซ ๋ฏธ์ฌ์ผ (1, 4)๋ฅผ ์๊ฒฉํ๋ค. ๐๐ป currEnd = 4, answer = 1
3๏ธโฃ ๋ค์ ๋ฏธ์ฌ์ผ (4, 5)๋ฅผ ๋ณด๋ฉด, 4 < 4 ์ด๋ฏ๋ก false์ฌ์ ์๊ฒฉ์ด ํ์ํจ ๐๐ป currEnd = 5, answer = 2
4๏ธโฃ ๋ค์ ๋ฏธ์ฌ์ผ (3, 7)์ 3 < 5์ด๋ฏ๋ก true์ฌ์ ์ด๋ฏธ ์ปค๋ฒ๋จ ๐๐ป continue
5๏ธโฃ ๋ค์ ๋ฏธ์ฌ์ผ (4, 8)๋ 4 < 5์ด๋ฏ๋ก true์ฌ์ ์ด๋ฏธ ์ปค๋ฒ๋จ ๐๐ป continue
6๏ธโฃ ๋ค์ ๋ฏธ์ฌ์ผ (5, 12)๋ 5 < 5์ด๋ฏ๋ก false์ฌ์ ์๊ฒฉ์ด ํ์ํจ ๐๐ป currEnd = 12, answer = 3
7๏ธโฃ ๋๋จธ์ง ๋ฏธ์ฌ์ผ๋ค์ ์ ๋ถ s < 12 ์ด๋ฏ๋ก true์ฌ์ ์ด๋ฏธ ๋ค ์ปค๋ฒ๋จ ๐๐ป continue
โ ๋ฐ๋ผ์ ์ต์ข ์๊ฒฉ ๋ฏธ์ฌ์ผ ์๋ answer = 3์

๐ก ํต์ฌ ํฌ์ธํธ
1๏ธโฃ ๋์ ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋ ๊ฒ์ด ํต์ฌ
2๏ธโฃ ๊ฐ๊ตฌ๊ฐ (s, e)์ด๊ธฐ ๋๋ฌธ์ x = e๋ ํฌํจ๋์ง ์์์ ์ฃผ์ํ๊ธฐ
๐ ์๊ฐ ๋ณต์ก๋
์ ๋ ฌ: O(N log N)
์ํ: O(N)
๐๐ป ์ ์ฒด ์๊ฐ ๋ณต์ก๋: O(N log N)
'๐ป ์ฝํ > ๐ JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ๊ณต์ (1) | 2025.07.23 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ์งํ ์ ๊ธฐ (0) | 2025.07.23 |
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ๋์์ ์ฌ์๊ธฐ (1) | 2025.07.21 |
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ์ ์ฐ๊ทผ๋ฌด์ (3) | 2025.07.20 |
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ๋ฐํํ๋ฉด ์ ๋ฆฌ (2) | 2025.05.28 |