๐Ÿชจํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค : ์ง•๊ฒ€๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ

๊ธ๊ธยท2025๋…„ 11์›” 30์ผ

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ๋ก ๋ณด๊ธฐ
27/31

๋ฌธ์ œ

2019 ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ๊ฒจ์šธ ์ธํ„ด์‹ญ ์ง•๊ฒ€๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ

๐Ÿชจ ์ง•๊ฒ€๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ (์นด์นด์˜ค ๋ฌธ์ œ ์š”์•ฝ)

์นด์นด์˜ค ์ดˆ๋“ฑํ•™๊ต์˜ ๋‹ˆ๋‹ˆ์ฆˆ ์นœ๊ตฌ๋“ค์ด ๋ผ์ด์–ธ ์„ ์ƒ๋‹˜๊ณผ ํ•จ๊ป˜ ๊ฐ€์„ ์†Œํ’ ์ค‘ ๊ฐœ์šธ์„ ๊ฑด๋„ˆ๊ธฐ ์œ„ํ•ด ์ง•๊ฒ€๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ์•ผ ํ•œ๋‹ค.
๊ฐ ๋””๋”ค๋Œ์—๋Š” ์ˆซ์ž๊ฐ€ ์“ฐ์—ฌ ์žˆ์œผ๋ฉฐ, ๋ฐŸ์„ ๋•Œ๋งˆ๋‹ค ์ˆซ์ž๊ฐ€ 1์”ฉ ๊ฐ์†Œํ•œ๋‹ค.

๐Ÿ” ๊ทœ์น™ ์ •๋ฆฌ

  • ๋””๋”ค๋Œ์€ ์ผ๋ ฌ๋กœ ๋†“์—ฌ ์žˆ์œผ๋ฉฐ, ๊ฐ ๋””๋”ค๋Œ์€ ๋ฐŸ์„ ๋•Œ๋งˆ๋‹ค ์ˆซ์ž๊ฐ€ 1 ๊ฐ์†Œํ•œ๋‹ค.
  • ๋””๋”ค๋Œ์˜ ์ˆซ์ž๊ฐ€ 0์ด ๋˜๋ฉด ๋” ์ด์ƒ ๋ฐŸ์„ ์ˆ˜ ์—†๋‹ค.
  • ๋ฐŸ์„ ์ˆ˜ ์—†๋Š” ๋Œ์ด ๋‚˜์˜ค๋ฉด, ๊ทธ ๋‹ค์Œ ๋Œ๋กœ ์—ฌ๋Ÿฌ ์นธ ๊ฑด๋„ˆ๋›ฐ์–ด ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ, ๊ฑด๋„ˆ๋›ธ ๋•Œ ์—ฌ๋Ÿฌ ์นธ ์ค‘ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋Œ๋งŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์นœ๊ตฌ๋“ค์€ ํ•œ ๋ช…์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ์ง•๊ฒ€๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„Œ๋‹ค.
  • ์นœ๊ตฌ๊ฐ€ ๋ชจ๋‘ ๊ฑด๋„Œ ํ›„์— ๋‹ค์Œ ์นœ๊ตฌ๊ฐ€ ์ถœ๋ฐœํ•œ๋‹ค.
  • ๊ฐœ์šธ์˜ ์˜ค๋ฅธ์ชฝ ๊ฑด๋„ˆํŽธ์— ๋„์ฐฉํ•ด์•ผ "๊ฑด๋„Œ ๊ฒƒ"์œผ๋กœ ์ธ์ •ํ•œ๋‹ค.

๐Ÿงฎ ๋ฌธ์ œ ์š”๊ตฌ์‚ฌํ•ญ

  • ์ฃผ์–ด์ง„ ๋ฐฐ์—ด stones๋Š” ๊ฐ ๋””๋”ค๋Œ์˜ ์ดˆ๊ธฐ ์ˆซ์ž(๋‚ด๊ตฌ๋„)๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • k๋Š” ํ•œ ๋ฒˆ์— ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์นธ ์ˆ˜์ด๋‹ค.
  • ์ด ์กฐ๊ฑด์—์„œ, ์ตœ๋Œ€ ๋ช‡ ๋ช…์˜ ์นœ๊ตฌ๊ฐ€ ๋ฌด์‚ฌํžˆ ์ง•๊ฒ€๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

๐Ÿ“Œ ์ œํ•œ์‚ฌํ•ญ

  • ๋‹ˆ๋‹ˆ์ฆˆ ์นœ๊ตฌ ์ˆ˜๋Š” ๋ฌด์ œํ•œ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.
  • stones ๋ฐฐ์—ด ๊ธธ์ด: 1 ~ 200,000
  • ๊ฐ ๋””๋”ค๋Œ ๊ฐ’: 1 ~ 200,000,000
  • k: 1 ~ stones.length

๐Ÿงช ์˜ˆ์‹œ

stoneskresult
[2, 4, 5, 3, 2, 1, 4, 2, 5, 1]33

3๋ช…๊นŒ์ง€๋Š” ๊ฑด๋„ ์ˆ˜ ์žˆ์ง€๋งŒ, 4๋ฒˆ์งธ๋Š” ์—ฐ์†์œผ๋กœ ๋ฐŸ์„ ์ˆ˜ ์—†๋Š” ๋””๋”ค๋Œ ๊ตฌ๊ฐ„์ด ์ƒ๊ฒจ ๊ฑด๋„ˆ์ง€ ๋ชปํ•œ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #1

์ฒซ ๋ฒˆ์งธ ์นœ๊ตฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง•๊ฒ€๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์นœ๊ตฌ๊ฐ€ ์ง•๊ฒ€๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„Œ ํ›„ ๋””๋”ค๋Œ์— ์ ํžŒ ์ˆซ์ž๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋‘ ๋ฒˆ์งธ ์นœ๊ตฌ๋„ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ง•๊ฒ€๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์นœ๊ตฌ๊ฐ€ ์ง•๊ฒ€๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„Œ ํ›„ ๋””๋”ค๋Œ์— ์ ํžŒ ์ˆซ์ž๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์„ธ ๋ฒˆ์งธ ์นœ๊ตฌ๋„ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ง•๊ฒ€๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ธ ๋ฒˆ์งธ ์นœ๊ตฌ๊ฐ€ ์ง•๊ฒ€๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„Œ ํ›„ ๋””๋”ค๋Œ์— ์ ํžŒ ์ˆซ์ž๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋„ค ๋ฒˆ์งธ ์นœ๊ตฌ๊ฐ€ ์ง•๊ฒ€๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋ ค๋ฉด, ์„ธ ๋ฒˆ์งธ ๋””๋”ค๋Œ์—์„œ ์ผ๊ณฑ ๋ฒˆ์งธ ๋””๋”ค๋Œ๋กœ ๋„ค ์นธ์„ ๊ฑด๋„ˆ๋›ฐ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ k = 3 ์ด๋ฏ€๋กœ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ตœ๋Œ€ 3๋ช…์ด ๋””๋”ค๋Œ์„ ๋ชจ๋‘ ๊ฑด๋„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ ๋ถ„์„

์ด ๋ฌธ์ œ๋ฅผ ์ฒ˜์Œ ๋ณด์•˜์„ ๋•Œ๋Š” ๋ฐฐ์—ด์„ ๋Œ๋ฉด์„œ ์กฐ๊ฑด์„ ํ™•์ธํ•˜๋Š” ์™„์ „ํƒ์ƒ‰์ด ๊ฐ€์žฅ ๋– ์˜ฌ๋ž์ง€๋งŒ, ์™„์ „ํƒ์ƒ‰์œผ๋กœ๋Š” ์ ˆ๋Œ€ ํ’€ ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ์ด๋‹ค.

์™œ ์™„์ „ํƒ์ƒ‰์ด ๋ถˆ๊ฐ€๋Šฅํ•œ๊ฐ€?

์ž…๋ ฅ ํฌ๊ธฐ

  • ๋Œ ๊ฐœ์ˆ˜: ์ตœ๋Œ€ 200,000
  • ๋Œ ๋‚ด๊ตฌ๋„: ์ตœ๋Œ€ 200,000,000
  • ์นœ๊ตฌ ์ˆ˜๋Š” ์‚ฌ์‹ค์ƒ ๋ฌดํ•œ๋Œ€

๋งŒ์•ฝ โ€œ1๋ช…, 2๋ช…โ€ฆ ๊ณ„์† ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ ์™„์ „ํƒ์ƒ‰โ€์„ ์‹œ๋„ํ•˜๋ฉด
์–ต ร— ์–ต ์ˆ˜์ค€์˜ ์—ฐ์‚ฐ์ด ๋ฐœ์ƒํ•˜์—ฌ ์ ˆ๋Œ€๋กœ ์‹œ๊ฐ„ ๋‚ด์— ๋ชป ๋๋‚œ๋‹ค.

ํ•ต์‹ฌ ์•„์ด๋””์–ด: โ€˜๋ช‡ ๋ช…์ด ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š”์ง€โ€™๋ฅผ ์ด๋ถ„ํƒ์ƒ‰ํ•˜๊ธฐ

์ด ๋ฌธ์ œ๋Š” โ€œ์ •๋‹ต์„ ์ง์ ‘ ์ฐพ๋Š”โ€ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ
โ€œ์ •๋‹ต์„ ๊ฐ€์ •ํ•˜๊ณ  ๊ฐ€๋Šฅํ•œ์ง€ ์ฒดํฌํ•˜๋Š”โ€ ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๋‹ค.

์ด๋ถ„ํƒ์ƒ‰์ด๋ž€ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ์›ํ•˜๋Š” target ๊ฐ’์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
์ด ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„ ๊ฐ’์„ mid๋กœ ๋‘๊ณ  target์ด mid ๋ณด๋‹ค ํฐ์ง€ ์ž‘์€์ง€๋ฅผ ํŒ๋‹จํ•˜์—ฌ ๋ฒ”์œ„๋ฅผ ์ขํ˜€๋‚˜๊ฐ„๋‹ค.

์ด๋ถ„ํƒ์ƒ‰์€ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(logN)์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ์–ด๋งˆ๋ฌด์‹œํ•˜๊ฒŒ ํฐ ๊ฒฝ์šฐ์— ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ถ„ํƒ์ƒ‰ ์˜ˆ์‹œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

    public static int binarySearch(int[] arr, int target) {
        int left = 0;
        int right = arr.length - 1;

        while (left <= right) {            
            int mid = (left + right) / 2;

            if (arr[mid] == target) {
                return mid;                 // Target ๋ฐœ๊ฒฌ
            } else if (arr[mid] < target) {
                left = mid + 1;             // ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ฒ”์œ„ ์ด๋™
            } else {
                right = mid - 1;            // ์™ผ์ชฝ์œผ๋กœ ๋ฒ”์œ„ ์ด๋™
            }
        }

        return -1; // ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ
    }
}

๊ทธ๋Ÿฌ๋‚˜, ์ด ๋ฌธ์ œ๋Š” ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ํŠน์ • ๊ฐ’์„ ์ฐพ๋Š” ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๊ณ 
์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ตœ๋Œ“๊ฐ’์„ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค.
์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ํŒŒ๋ผ๋ฉ”ํŠธ๋ฆญ ์„œ์น˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŒŒ๋ผ๋ฉ”ํŠธ๋ฆญ ์„œ์น˜๋Š” ์ด๋ถ„ํƒ์ƒ‰๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ์ด๋ถ„ํƒ์ƒ‰๊ณผ ๋‹ฌ๋ฆฌ ์ฃผ์–ด์ง„ ์ผ๋ จ์˜ ๋ฐฐ์—ด์—์„œ ์ฐพ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํŠน์ • ๋ฒ”์œ„ ๋‚ด์—์„œ ์›ํ•˜๋Š” ์กฐ๊ฑด์— ์ผ์น˜ํ•˜๋Š” ๊ฐ’์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์„ค๊ณ„ ์Šคํฌ๋ž˜์น˜

ํƒ์ƒ‰ ๋ฒ”์œ„

  • ์ตœ์†Œ ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š” ์ธ์›: 1๋ช…
  • ์ตœ๋Œ€ ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š” ์ธ์›: max(stones)
    (๊ฐ€์žฅ ํฐ ๋‚ด๊ตฌ๋„๋ฅผ ๊ฐ€์ง„ ๋Œ์ด ๋ฒ„ํ‹ธ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ธ์›)

์ฆ‰,
left = 1
right = max(stones)
๋กœ ๋‘๊ณ  ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•œ๋‹ค.

mid๋ช…์˜ ์นœ๊ตฌ๊ฐ€ ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ

mid๋ช…์„ ๋ณด๋ƒˆ๋‹ค๊ณ  โ€œ๊ฐ€์ •โ€ํ•˜๋ฉด,
๋ชจ๋“  ๋Œ์˜ ๋‚ด๊ตฌ๋„๋Š” stones[i] - mid๊ฐ€ ๋œ๋‹ค.

์ด๋•Œ ์—ฐ์†ํ•ด์„œ mid๋ช…์„ ๋ฒ„ํ‹ฐ์ง€ ๋ชปํ•˜๋Š” ๋Œ(= ์Œ์ˆ˜๊ฐ€ ๋œ ๋Œ) ์ด
k๊ฐœ ์ด์ƒ ์—ฐ์†์œผ๋กœ ๋“ฑ์žฅํ•˜๋ฉด โ†’ ๊ฑด๋„ˆ์ง€ ๋ชปํ•จ.

์™œ โ€œ0 ์ดํ•˜โ€๊ฐ€ ์•„๋‹ˆ๋ผ โ€œ์Œ์ˆ˜(<0)โ€๋กœ ์ฒดํฌํ•ด์•ผ ํ• ๊นŒ?

๋ฐฐ์—ด์—์„œ stones[i] - mid๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ,

  • โ€œmid๋ช…์ด ๋ชจ๋‘ ์ง€๋‚˜๊ฐ„ ํ›„โ€์˜ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ž„
  • ๋Œ์˜ ๊ฐ’์ด 0์ด๋ผ๋Š” ๊ฒƒ์€ ์ง€๋‚˜๊ฐˆ ๋‹น์‹œ์—๋Š” ์–‘์ˆ˜์˜€๋‹ค๋Š” ์˜๋ฏธ

์ฆ‰, 0์€ ๊ฑด๋„ ์ˆ˜ ์žˆ์—ˆ๋˜ ์ƒํƒœ๋‹ค.
๋•Œ๋ฌธ์— ์กฐ๊ฑด์€ ๋ฐ˜๋“œ์‹œ stones[i] - mid < 0 (์Œ์ˆ˜) ๋กœ ์ฒดํฌํ•ด์•ผ ํ•œ๋‹ค.

์„ค๊ณ„ ์ฝ”๋“œ

1. ํŒŒ๋ผ๋ฉ”ํŠธ๋ฆญ ์„œ์น˜ ๊ณผ์ •

    public int solution(int[] stones, int k) {
        int left = 1; //์ตœ์†Œ ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š” ์นœ๊ตฌ์˜ ์ˆ˜ 
        //์ตœ๋Œ€ ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š” ์นœ๊ตฌ์˜ ์ˆ˜ (stones์˜ ์ตœ๋Œ“๊ฐ’)
        int right = Arrays.stream(stones).max().getAsInt();

		//left๊ฐ€ right๋ณด๋‹ค ์ž‘์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
        while (left <= right) { 
        	//์ค‘๊ฐ„๊ฐ’ ์„ค์ •
            int mid = (left + right) / 2;
            
            // mid๋ช…์ด ๋ชป ๊ฑด๋„ˆ๋ฉด โ†’ ์ธ์›์ˆ˜๋ฅผ ์ค„์—ฌ์•ผ ํ•จ
            if(canCross(mid, stones, k) == -1) {
                right = mid -1;
             // mid๋ช…์ด ๊ฑด๋„ˆ๋ฉด โ†’ ๋” ๋งŽ์ด ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธ
            } else  {
                left = mid + 1;
                
            } 
        }
        // right๋Š” โ€˜๊ฐ€๋Šฅํ–ˆ๋˜ ์ตœ๋Œ€ midโ€™๊ฐ€ ๋œ๋‹ค.
        return right;
    }

2. mid๋ช…์˜ ์นœ๊ตฌ๊ฐ€ ์ง•๊ฒ€๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒ€์ฆํ•˜๋Š” ๊ณผ์ •

    public int canCross(int mid, int[] stones, int k) {
    // ์—ฐ์†์œผ๋กœ ์Œ์ˆ˜๊ฐ€ ๋˜๋Š” ๋Œ ๊ฐœ์ˆ˜
        int currStoneChain = 0;
        
        for (int i = 0; i < stones.length; i++) {
        // mid๋ช…์˜ ์นœ๊ตฌ๊ฐ€ ๋ฐŸ๊ณ  ๋‚œ ํ›„ ์Œ์ˆ˜ โ†’ ๋ฐŸ์„ ์ˆ˜ ์—†์Œ

            if (stones[i] - mid < 0) {
               currStoneChain += 1;
               
               //์—ฐ์†๋œ ๋Œ์˜ ์ˆ˜๊ฐ€ k ์ด์ƒ์ด๋ฉด ๊ฑด๋„ ์ˆ˜ ์—†๋‹ค.
                if (currStoneChain >= k) {
                    return -1;
                }
            } else { 
            //์—ฐ์†์ด ๋Š๊ธฐ๋ฉด ์ดˆ๊ธฐํ™”
                currStoneChain = 0;
            }
        }
        //mid๋ช…์€ ๊ฑด๋„ ์ˆ˜ ์žˆ๋‹ค.
        return 1;
    }

์ „์ฒด ํ๋ฆ„ ์š”์•ฝ

โœ”๏ธ mid๋ช…์„ ๋ณด๋‚ธ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ 
โ†’ stones ๋ฐฐ์—ด์—์„œ mid๋ฅผ ๋บ€ ๊ฒฐ๊ณผ๊ฐ€ ์Œ์ˆ˜์ธ์ง€ ํ™•์ธํ•˜๋ฉฐ
โ†’ ์—ฐ์†๋œ ์Œ์ˆ˜ ๊ฐœ์ˆ˜๊ฐ€ k ์ด์ƒ์ด๋ฉด ์‹คํŒจ
โœ”๏ธ ์ด ๊ณผ์ •์„ ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ๋ฐ˜๋ณต
โ†’ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋งŒ ํ™•์ธํ•˜๋ฉฐ ๋ฒ”์œ„๋ฅผ ์ขํ˜€๊ฐ
โœ”๏ธ ๊ฒฐ๊ตญ ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ mid(right)๊ฐ€ ์ •๋‹ต

์ฃผ์˜ํ•  ์ 

1. ํŒŒ๋ผ๋ฉ”ํŠธ๋ฆญ ์„œ์น˜์˜ return ๊ฐ’์ด right๊ฐ€ ๋˜๋Š” ์ด์œ 

์ข…๋ฃŒ ์ง์ „ ์‹œ์ ์€ ํ•ญ์ƒ:
right = ๊ฑด๋„ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฐ€์žฅ ํฐ mid
left = ๊ฑด๋„ ์ˆ˜ ์—†๋Š” ์ฒซ mid
์ฆ‰,
right๋Š” โ€œ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ์ธ์›์ˆ˜โ€์ด๊ณ 
left๋Š” โ€œ๋ถˆ๊ฐ€๋Šฅํ•œ ์ตœ์†Œ ์ธ์›์ˆ˜โ€๊ฐ€ ๋œ๋‹ค.
๊ทธ๋ž˜์„œ return ๊ฐ’์€ right.

2. mid๋ช…์˜ ์นœ๊ตฌ๊ฐ€ ๊ฑด๋„ ์ˆ˜ ์—†๋Š” ์กฐ๊ฑด์„ ๊ฒ€์ฆํ•  ๋•Œ 0์ดํ•˜๊ฐ€ ์•„๋‹ˆ๋ผ ์Œ์ˆ˜๊ฐ€ ๋˜๋Š” ์ด์œ 

๋ฌธ์ œ์—์„œ๋Š” ๋Œ์˜ ์ˆ˜๊ฐ€ 0์ด ๋˜๋ฉด ๊ฑด๋„ ์ˆ˜ ์—†๋‹ค๊ณ  ๋˜์–ด ์žˆ๋Š”๋ฐ ์ฝ”๋“œ์—์„œ๋Š”

if (stones[i] - mid <= 0) {

์ด ์•„๋‹ˆ๋ผ

if (stones[i] - mid < 0) {

์œผ๋กœ ํ•œ ์ด์œ ๋Š”,
ํ•ด๋‹น stones[i] - mid๋Š” mid๋ช…์ด ๋ฐŸ๊ณ  ๋‚œ ํ›„์˜ ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๋ฐŸ๊ณ  ๋‚œ ํ›„, ๋Œ์˜ ์ˆซ์ž๊ฐ€ 0์ด ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์€ ์ง€๋‚˜๊ฐˆ ๋•Œ๋Š” ์–‘์ˆ˜์˜€๋‹ค๋Š” ์˜๋ฏธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ง€๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

3. ๋Œ์„ ๋ฐŸ์€ ํ›„ ์ˆซ์ž๋ฅผ ๊ตฌํ•  ๋•Œ ๋ฐฐ์—ด์„ ์ง์ ‘ ๋ณ€๊ฒฝํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

์ฒ˜์Œ์—๋Š” ์กฐ๊ฑด์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ผ๋‹ค.
์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐฐ์—ด์˜ ๊ฐ’์„ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜๋ฉด, ๋‹ค์Œ ์ด๋ถ„ํƒ์ƒ‰ ๋•Œ ๋ฐฐ์—ด์ด ๋‹ฌ๋ผ์ ธ์„œ ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์„ ๊ตฌํ•˜์ง€ ๋ชปํ•œ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ์˜ˆ์ œ 1๋ฒˆ์—์„œ๋Š” 1๋ฒˆ๋งŒ ๊ฒ€์ฆ์„ ํ•ด๋„ ๋‹ต์ด ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์ œ๋Š” ๋งž์ถ”๋Š”๋ฐ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋Š” ๋ชจ๋‘ ํ‹€๋ฆฌ๋Š” ๋ถˆ์ƒ์‚ฌ๊ฐ€์ƒ๊ธด๋‹ค.

int result = stones[i] -= mid;
if (result < 0) {

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’์„ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜์ง€ ๋ง๊ณ  ์•„๋ž˜์ฒ˜๋Ÿผ ์กฐ๊ฑด๋ฌธ์œผ๋กœ ์“ฐ๋„๋ก ํ•˜์ž

if (stones[i] - mid < 0) {

0๊ฐœ์˜ ๋Œ“๊ธ€