Hello Kitty Eyes Shut
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ป ์ฝ”ํ…Œ/๐Ÿ“Œ JAVA

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/JAVA] ์š”๊ฒฉ์‹œ์Šคํ…œ

๋ฐ˜์‘ํ˜•

 

 

 

 

๐Ÿ”— ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

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)

๋ฐ˜์‘ํ˜•