Cute Running Puppy

algorithm/Programmers

[Programmers] ์š”๊ฒฉ ์‹œ์Šคํ…œ (Python, Java)

R.silver 2024. 7. 3. 17:47
๋ฐ˜์‘ํ˜•

๐Ÿ“–๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/181188

 

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

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

โœจํ•ต์‹ฌ ๋‚ด์šฉ 

A ๋‚˜๋ผ ๋ฏธ์‚ฌ์ผ: x ์ถ•์— ํ‰ํ–‰ํ•œ ์ง์„  ํ˜•ํƒœ์˜ ๋ชจ์–‘

B ๋‚˜๋ผ ๋ฏธ์‚ฌ์ผ: x ์ถ•์— ์ˆ˜์ง ํ•œ ์ง์„  ํ˜•ํƒœ์˜ ๋ชจ์–‘, ๋ฐœ์‚ฌ๋œ ๋ฏธ์‚ฌ์ผ์€ ํ•ด๋‹น x ์ขŒํ‘œ์— ๊ฑธ์ณ ์žˆ๋Š” ๋ชจ๋“  ๋ฏธ์‚ฌ์ผ ๊ด€ํ†ต ๊ฐ€๋Šฅ
(๋‹จ, ๊ฐœ๊ตฌ๊ฐ„์ด๊ธฐ์— s, e์—์„œ ๋ฐœ์‚ฌํ•˜๋Š” ๋ฏธ์‚ฌ์ผ๋กœ๋Š” ์š”๊ฒฉ ๋ถˆ๊ฐ€, x๊ฐ€ ์‹ค์ˆ˜์ธ ๊ณณ์—์„œ ๋ฐœ์‚ฌ ๊ฐ€๋Šฅ)

๐Ÿค”ํ•ด๊ฒฐ ์•„์ด๋””์–ด 

์œ ํ˜•: ๊ทธ๋ฆฌ๋””, ์ •๋ ฌ

๐ŸŸก ๊ตฌ์กฐ

1. targets์„ e ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ 

2. targets์„ ๋Œ๋ฉฐ ํ•ด๋‹น ์ธ๋ฑ์Šค[i]์˜ s๊ฐ€ ์ €์žฅ๋œ ์ธ๋ฑ์Šค[idx]์˜ e ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€์ง€ ํ™•์ธ 

-> ์ด์ „์— ๋“ฑ์žฅํ•œ e๊ฐ€ ๋‹ค์Œ์— ๋“ฑ์žฅํ•œ s ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ๋‘˜์€ ๊ฒน์น˜์ง€ ์•Š๋Š”๋‹ค (์•„๋ž˜ ๊ทธ๋ฆผ ์ฐธ์กฐ) 

3. ์กฐ๊ฑด์„ ๋งŒ์กฑํ•œ๋‹ค๋ฉด idx๋ฅผ ํ˜„์žฌ ์ธ๋ฑ์Šค๋กœ ๊ฐฑ์‹ ํ•˜๊ณ , cnt += 1


โœ…์ •๋‹ต ์ฝ”๋“œ (Python)

def solution(targets):
	# 1. [0] ๊ธฐ์ค€ ์ •๋ ฌ
    targets.sort(key=lambda x: (x[1], x[0]))

	# 2. ํ•œ ๋ฒˆ์— ์š”๊ฒฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํŒ๋‹จ
    idx, cnt = 0, 1 # // ๋ชจ๋‘ ํ•œ ๋ฒˆ์— ์š”๊ฒฉ ๊ฐ€๋Šฅํ•˜๋ฉด ๋ฏธ์‚ฌ์ผ์˜ ์ตœ์†Ÿ๊ฐ’์€ 1
    for i in range(1, len(targets)):
    	# ํ•œ ๋ฒˆ์— ์š”๊ฒฉ ๋ถˆ๊ฐ€ (๊ฐ™์€ x ์ƒ์— ์žˆ์ง€ ์•Š์Œ)
        if targets[idx][1] <= targets[i][0]:
            cnt += 1
            idx = i

    return cnt

โœ…์ •๋‹ต ์ฝ”๋“œ (Java)

package programmers.lv2;

public class ์š”๊ฒฉ_์‹œ์Šคํ…œ {
    import java.util.*;

    class Solution {
        public int solution(int[][] targets) {
            // 1. [0] ๊ธฐ์ค€ ์ •๋ ฌ
            Arrays.sort(targets, (o1, o2) -> (o1[1] - o2[1]));

            // 2. ํ•œ ๋ฒˆ์— ์š”๊ฒฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํŒ๋‹จ
            int idx = 0;
            int cnt = 1; // ๋ชจ๋‘ ํ•œ ๋ฒˆ์— ์š”๊ฒฉ ๊ฐ€๋Šฅํ•˜๋ฉด ๋ฏธ์‚ฌ์ผ์˜ ์ตœ์†Ÿ๊ฐ’์€ 1

            for (int i = 1 ; i < targets.length; i++){
                // ํ•œ ๋ฒˆ์— ์š”๊ฒฉ ๋ถˆ๊ฐ€ (๊ฐ™์€ x ์ƒ์— ์žˆ์ง€ ์•Š์Œ)
                if (targets[idx][1] <= targets[i][0]) {
                    idx = i;
                    cnt += 1;
                }
            }
            return cnt;
        }
    }
}
๋ฐ˜์‘ํ˜•