๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐Ÿ–ฅ dev-ruby

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ง•๊ฒ€๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ | ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ | Lv.3 | 2019 ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ๊ฒจ์šธ ์ธํ„ด์‹ญ ๋ณธ๋ฌธ

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

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ง•๊ฒ€๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ | ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ | Lv.3 | 2019 ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ๊ฒจ์šธ ์ธํ„ด์‹ญ

ruby_s 2022. 5. 2. 22:30
728x90
๋ฐ˜์‘ํ˜•
SMALL

๋ฌธ์ œ

https://programmers.co.kr/learn/courses/30/lessons/64062

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์ง•๊ฒ€๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ

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

programmers.co.kr

 

ํ’€์ด

์ •ํ™•์„ฑO, ํšจ์œจ์„ฑX ์ฝ”๋“œ

function solution2(stones, k) { // ์ •ํ™•์„ฑ๋งŒ ํ†ต๊ณผ
  let start = 1,
    end = Math.max(...stones);
  while (start <= end) {
    const mid = Math.floor((start + end) / 2);
    const temp = stones.map((num) => num - mid);
    let count = 0;
    for (const num of temp) {
      if (num <= 0) count++;
      else count = 0;
      if (count >= k) break;
    }
    if (count >= k) end = mid - 1;
    else {
      start = mid + 1;
    }
  }
  return start;
}

์ •ํ™•์„ฑO, ํšจ์œจ์„ฑO ํ†ต๊ณผ ์ฝ”๋“œ

function solution1(stones, k) { // ํšจ์œจ์„ฑ ํ†ต๊ณผ
  let start = 1,
    end = 200000000;
  while (start <= end) {
    const mid = Math.floor((start + end) / 2);
    let count = 0;
    for (const num of stones) {
      if (num - mid <= 0) count++;
      else count = 0;
      if (count >= k) break;
    }
    if (count >= k) end = mid - 1;
    else {
      start = mid + 1;
    }
  }
  return start;
}

์ˆ˜์˜ ๋ฒ”์œ„๊ฐ€ 20๋งŒ๊นŒ์ง€ ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ˆœํžˆ ๋ฐ˜๋ณต๋ฌธ๋งŒ ๋Œ๋ ค์„œ ํ•˜๊ธฐ์—” ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚  ๊ฑฐ๋ผ๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋”ฑ ๋ดค์„ ๋•Œ ์ด๋ถ„ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์•˜๋‹ค.

stones๋ฐฐ์—ด ์›์†Œ๋“ค์˜ ๋ฒ”์œ„๋Š” 1 ์ด์ƒ 200,000,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜๋ผ๊ณ  ์ฃผ์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— start๋ฅผ 1๋กœ, end๋ฅผ 200,000,000์œผ๋กœ ๋‘๊ณ stones๋ฅผ ํ•œ๋ฒˆ ๋Œ๋•Œ๋งˆ๋‹ค mid๊ฐ’์„ ๊ฐฑ์‹ ํ•œ๋‹ค.

for (const num of stones) {
  if (num - mid <= 0) count++;
  else count = 0;
  if (count >= k) break;
}

์ด ๋ถ€๋ถ„์€ ์—ฐ์†๋œ 0์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋กœ์ง์ด๋‹ค. stones์˜ ๊ฐ ์›์†Œ์— mid๋ฅผ ๋บ€๊ฐ’์ด 0๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์„ ๊ฒฝ์šฐ mid๊ฐ€ ํ•ด๋‹น ์›์†Œ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋Š” ๋œป์ด๋‹ค. 1๋ถ€ํ„ฐ 200,000,000์‚ฌ์ด๋ฅผ ๋ฒ”์œ„๋กœ ํ•ด์„œ mid๋ฅผ ๊ณ„์† ๊ฐฑ์‹ ํ•ด์„œ stones์— ๋ฐ˜์˜ํ•ด๋ณด๊ณ  mid์˜ ์™ผ์ชฝ ๋ฒ”์œ„๋ฅผ ํƒ์ƒ‰ํ•ด์•ผ ํ•  ์ง€ ์˜ค๋ฅธ์ชฝ ๋ฒ”์œ„๋ฅผ ํƒ์ƒ‰ํ•ด์•ผ ํ• ์ง€ ์„ ํƒํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

count๊ฐ€ k๋ณด๋‹ค ํด ๊ฒฝ์šฐ, end๋ฅผ mid - 1๋กœ ์™ผ์ชฝ(์•„๋ž˜) ๊ฐ’์„ ํƒ์ƒ‰ํ•˜๋„๋กํ•˜๊ณ , count๊ฐ€ k๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ, start๋ฅผ mid + 1๋กœ ์˜ค๋ฅธ์ชฝ(์œ„) ๊ฐ’์„ ํƒ์ƒ‰ํ•˜๋„๋ก ํ•œ๋‹ค. 


์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด์ž.

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

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

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

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

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

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


๋งŒ์•ฝ mid๊ฐ€ 200,000,000๋ถ€ํ„ฐ ๊ณ„์† 1/2์”ฉ ์ค„์—ฌ์™€์„œ 5๊ฐ€ ๋๋‹ค๊ณ  ์น˜์ž. ๊ทธ๋Ÿผ num - mid๊ฐ€ <= 0์ธ ์—ฐ์†์ ์ธ ๋ถ€๋ถ„์˜ ์ตœ๋Œ€ ๊ธธ์ด๋Š” ์ „์ฒด ๊ธธ์ด๊ฐ€ ๋ ๊ฑฐ๋‹ค.
์—ฌ๊ธฐ์„œ ๋‹ค์‹œ end๋ฅผ 5 - 1 = 4 ๋กœ ๊ฐฑ์‹ ํ•˜๋ฉด mid๋Š” 2๊ฐ€ ๋œ๋‹ค. ๊ทธ๋Ÿผ num - mid๊ฐ€ <= 0์ธ ์—ฐ์†์ ์ธ ๋ถ€๋ถ„์˜ ์ตœ๋Œ€ ๊ธธ์ด๋Š” 5๋ฒˆ์งธ์˜ 2 1 ์ด ๋ถ€๋ถ„์ผ๊ฑฐ๋‹ค.
2 < k์ด๋ฏ€๋กœ start = mid + 1 = 3์œผ๋กœ ๊ฐฑ์‹ ํ•˜๋ฉด mid๋Š” 3์ด ๋œ๋‹ค. ๊ทธ๋Ÿผ num - mid๊ฐ€ <= 0์ธ ์—ฐ์†์ ์ธ ๋ถ€๋ถ„์˜ ์ตœ๋Œ€ ๊ธธ์ด๋Š” 4๋ฒˆ์งธ์˜ 3 2 1 ์ด ๋ถ€๋ถ„์ผ๊ฑฐ๋‹ค. 3 >= k์ด๋ฏ€๋กœ end๋ฅผ mid - 1 = 2๋กœ ๊ฐฑ์‹ ๋˜๊ณ  start <= end๋ฅผ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•ด while๋ฌธ์„ ๋น ์ ธ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.


 

๋‚˜๋Š” ์ด๋ถ„ํƒ์ƒ‰์„ ์ธ๋ฑ์Šค์—์„œ ํ™œ์šฉํ•˜๋Š” ๋ฒ•๋งŒ ์•Œ์•˜๋Š”๋ฐ ์ด๋Ÿฐ์‹์œผ๋กœ ์›์†Œ๋“ค์˜ ์ตœ๋Œ€ ์ตœ์†Œ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ํƒ์ƒ‰ํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฑธ ์•Œ์•˜๋‹ค. ๋‹ค์Œ์— ์š”๋Ÿฐ ๋ฌธ์ œ ๋‚˜์˜ค๋ฉด ์ œ๋Œ€๋กœ ํ™œ์šฉํ•ด๋ด์•ผ์ง€ ..

 

728x90
๋ฐ˜์‘ํ˜•
LIST