๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด/Programmers - Lv.1

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv.1] ์˜ˆ์‚ฐ

ํ’€์ด ๋‚ ์งœ : 2025.04.25
๋ฌธ์ œ ์œ ํ˜• : ์—ฐ์Šต ๋ฌธ์ œ
๋ฌธ์ œ ์ œ๋ชฉ : ์˜ˆ์‚ฐ
๋ฌธ์ œ ๋งํฌ : https://school.programmers.co.kr/learn/courses/30/lessons/12982

Intuition

  • ์ •ํ•ด์ง„ ์˜ˆ์‚ฐ์—์„œ ๋ถ€์„œ์—์„œ ์‹ ์ฒญํ•œ ๊ธˆ์•ก์„ ์ง€์›ํ•ด์ค„ ๋•Œ, ์ตœ๋Œ€ ๋ช‡ ๊ฐœ ๋ถ€์„œ์— ์ง€์›ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.
  • ์‹ ์ฒญํ•œ ๊ธˆ์•ก์ด ์ž‘์€ ๋ถ€์„œ๋“ค๋ถ€ํ„ฐ ์ง€์›ํ•ด์•ผ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ๋ถ€์„œ์— ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ˜„์žฌ ์ƒํ™ฉ์—์„œ ๊ฐ€์žฅ ์ตœ์ ์ธ ์„ ํƒ์„ ๋ฐ˜๋ณตํ•ด์„œ ์ „์ฒด ์ตœ์ ํ•ด๋ฅผ ๊ตฌํ•˜๋Š” ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋กœ๋„ ๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

Approach

  • ๋ถ€์„œ์˜ ์‹ ์ฒญ ๊ธˆ์•ก์ด ๋‹ด๊ธด ๋ฐฐ์—ด d๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.
  • ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ d๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ, ๋ถ€์„œ์˜ ์‹ ์ฒญ ๊ธˆ์•ก(amount)์ด ๋‚จ์€ ์˜ˆ์‚ฐ(budget) ๋ณด๋‹ค ์ž‘์œผ๋ฉด ์ง€์›ํ•œ ๋ถ€์„œ ์ˆ˜(count)๋ฅผ 1 ๋Š˜๋ฆฐ๋‹ค.
  • count๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Complexity

  • Time complexity : O(n log n)
    • d์˜ ๊ธธ์ด๋ฅผ n์ด๋ผ๊ณ  ํ•  ๋•Œ ์ •๋ ฌ์— O(n log n), d๋ฅผ ์ˆœํšŒํ•˜๋Š”๋ฐ O(n)์œผ๋กœ, ๊ฒฐ๊ณผ์ ์œผ๋กœ O(n log n)์ด๋‹ค.
  • Splace complexity : O(1)
    • ์ž…๋ ฅ๊ฐ’์„ ์ œ์™ธํ•˜๋ฉด ์ถ”๊ฐ€ ์‚ฌ์šฉ ๊ณต๊ฐ„์ด ๊ฑฐ์˜ ์—†๋‹ค.

Code (JS)

function solution(d, budget) {
    let count = 0;

    d.sort((a, b) => a - b); // ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ

    d.forEach((amount) => {
        if (budget - amount >= 0) {
            budget -= amount;
            count += 1;
        }
    })

    return count;
}