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

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

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv.2] ๊ตฌ๋ช…๋ณดํŠธ

ํ’€์ด ๋‚ ์งœ : 2025.05.07
๋ฌธ์ œ ์œ ํ˜• : ํƒ์š•๋ฒ•
๋ฌธ์ œ ์ œ๋ชฉ : ๊ตฌ๋ช…๋ณดํŠธ
๋ฌธ์ œ ๋งํฌ : https://school.programmers.co.kr/learn/courses/30/lessons/42885

Intuition

  • ๊ฐ ์‚ฌ๋žŒ์˜ ๋ชธ๋ฌด๊ฒŒ(people)์™€ ๊ตฌ๋ช…๋ณดํŠธ์˜ ๋ฌด๊ฒŒ ์ œํ•œ(limit)์ด ์ฃผ์–ด์งˆ ๋•Œ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๊ตฌ๋ช…๋ณดํŠธ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.
  • 1๊ฐœ์˜ ๋ณดํŠธ์—๋Š” ์ตœ๋Œ€ 2๋ช…๊นŒ์ง€๋งŒ ํƒœ์šธ ์ˆ˜ ์žˆ๋‹ค๋Š” ์กฐ๊ฑด์ด ์žˆ๋‹ค.
    • 2๋ช…์„ ํƒœ์šด ๋ณด๋“œ๊ฐ€ ๋งŽ์„์ˆ˜๋ก ํ•„์š”ํ•œ ๋ณดํŠธ ๊ฐœ์ˆ˜๋Š” ์ค„์–ด๋“ ๋‹ค.
    • ๊ฐ€์žฅ ๋ฌด๊ฑฐ์šด ์‚ฌ๋žŒ์„ ๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ€๋ณ๊ณ  ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์‚ฌ๋žŒ๊ณผ ์ง์ง“๋Š” ๊ฒƒ์ด ์ตœ์ ์ด๋‹ค. ⇒ ๊ทธ๋ฆฌ๋”” ๋ฐฉ์‹
    • ๋ฌด๊ฑฐ์šด ์‚ฌ๋žŒ์€ ์ง์ง€์„ ์ˆ˜ ์žˆ๋Š” ๋Œ€์ƒ์ด ์ ๊ณ  ํ˜ผ์ž ํƒˆ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค. ์ฆ‰, ๋ฌด๊ฒŒ ์ œํ•œ์„ ๋„˜์–ด๊ฐ€๋ฉด ๋ฌด๊ฑฐ์šด ์‚ฌ๋žŒ์ด ํ˜ผ์ž ํƒ€์•ผ ํ•œ๋‹ค.
  • ๋ฐฐ์—ด์„ ์ •๋ ฌ ํ›„ ์–‘๋์—์„œ ์ตœ๋Œ“๊ฐ’, ์ตœ์†Ÿ๊ฐ’์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์–‘๋์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์กฐํ•ฉ์„ ์ฐพ๋Š” ๊ฒฝ์šฐ ํˆฌ ํฌ์ธํ„ฐ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Approach

  • ์‚ฌ๋žŒ๋“ค์˜ ๋ชธ๋ฌด๊ฒŒ๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด(people)์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.
  • ํ•„์š”ํ•œ ๋ณดํŠธ ๊ฐœ์ˆ˜(boat), ์™ผ์ชฝ ํฌ์ธํ„ฐ(start), ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ(end)๋ฅผ ์„ ์–ธํ•œ๋‹ค.
  • start์™€ end๊ฐ€ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ํƒ์ƒ‰์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
    • start์™€ end์˜ ๋ชธ๋ฌด๊ฒŒ ํ•ฉ์ด limit ๋ณด๋‹ค ํฌ๋ฉด, ๋ฌด๊ฑฐ์šด ์‚ฌ๋žŒ์„ ํ˜ผ์ž ํƒœ์›Œ์•ผ ํ•˜๋ฏ€๋กœ end๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
    • start์™€ end์˜ ๋ชธ๋ฌด๊ฒŒ ํ•ฉ์ด limit ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด, ๊ฐ™์ด ํƒˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ start๋ฅผ 1 ์ฆ๊ฐ€, end๋ฅผ 1 ๊ฐ์†Œ์‹œํ‚จ๋‹ค.
    • ํ•œ ๋ฒˆ์˜ ํƒ์ƒ‰ ์ข…๋ฃŒ ํ›„ boat๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
      (๋‘ ํฌ์ธํ„ฐ๊ฐ€ ๋งŒ๋‚˜๋ฉด 1๋ช… ๋‚จ์•„์žˆ๋‹ค๋Š” ๋œป์œผ๋กœ, ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ boat๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ๋œ๋‹ค.)
  • boat๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Complexity

  • Time complexity : O(n log n)
    • people์˜ ๊ธธ์ด๋ฅผ n ์ด๋ผ๊ณ  ํ•  ๋•Œ,
      ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์—์„œ O(n log n)
      ํˆฌ ํฌ์ธํ„ฐ ํƒ์ƒ‰์—์„œ start, end ํ•ฉ์ณ์„œ ์ตœ๋Œ€ n๋ฒˆ ์ด๋™ํ•˜๋ฉด while ๋ฃจํ”„๊ฐ€ ๋๋‚˜๋ฏ€๋กœ O(n)
      ์ข…ํ•ฉ์ ์œผ๋กœ O(n log n)์ด๋‹ค.
  • Splace complexity : O(1)
    • ์ž…๋ ฅ ๋ฐฐ์—ด ์™ธ์— ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ๊ฑฐ์˜ ์—†์Œ

Code (JS)

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

    let boat = 0;
    let start = 0;
    let end = people.length - 1;

    // ์–‘๋์—์„œ ํƒ์ƒ‰
    while (start <= end) {
        if (people[start] + people[end] > limit) {
            // ๋ฌด๊ฑฐ์šด ์‚ฌ๋žŒ ํ˜ผ์ž ํƒ
            end -= 1;
        } else {
            // ๋ฌด๊ฑฐ์šด ์‚ฌ๋žŒ, ๊ฐ€๋ฒผ์šด ์‚ฌ๋žŒ ๊ฐ™์ด ํƒ
            start += 1;
            end -= 1;
        }

        boat += 1;
    }

    return boat;
}