Jieunny์˜ ๋ธ”๋กœ๊ทธ

[JS] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์นดํŽซ ๋ณธ๋ฌธ

Study/Coding Test

[JS] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์นดํŽซ

Jieunny 2023. 2. 14. 09:52

๐Ÿ“Œ  ๋ฌธ์ œ

Leo๋Š” ์นดํŽซ์„ ์‚ฌ๋Ÿฌ ๊ฐ”๋‹ค๊ฐ€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ค‘์•™์—๋Š” ๋…ธ๋ž€์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ๊ณ  ํ…Œ๋‘๋ฆฌ 1์ค„์€ ๊ฐˆ์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ๋Š” ๊ฒฉ์ž ๋ชจ์–‘ ์นดํŽซ์„ ๋ดค์Šต๋‹ˆ๋‹ค.

Leo๋Š” ์ง‘์œผ๋กœ ๋Œ์•„์™€์„œ ์•„๊นŒ ๋ณธ ์นดํŽซ์˜ ๋…ธ๋ž€์ƒ‰๊ณผ ๊ฐˆ์ƒ‰์œผ๋กœ ์ƒ‰์น ๋œ ๊ฒฉ์ž์˜ ๊ฐœ์ˆ˜๋Š” ๊ธฐ์–ตํ–ˆ์ง€๋งŒ, ์ „์ฒด ์นดํŽซ์˜ ํฌ๊ธฐ๋Š” ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

Leo๊ฐ€ ๋ณธ ์นดํŽซ์—์„œ ๊ฐˆ์ƒ‰ ๊ฒฉ์ž์˜ ์ˆ˜ brown, ๋…ธ๋ž€์ƒ‰ ๊ฒฉ์ž์˜ ์ˆ˜ yellow๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ ์นดํŽซ์˜ ๊ฐ€๋กœ, ์„ธ๋กœ ํฌ๊ธฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • ๊ฐˆ์ƒ‰ ๊ฒฉ์ž์˜ ์ˆ˜ brown์€ 8 ์ด์ƒ 5,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ๋…ธ๋ž€์ƒ‰ ๊ฒฉ์ž์˜ ์ˆ˜ yellow๋Š” 1 ์ด์ƒ 2,000,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ์นดํŽซ์˜ ๊ฐ€๋กœ ๊ธธ์ด๋Š” ์„ธ๋กœ ๊ธธ์ด์™€ ๊ฐ™๊ฑฐ๋‚˜, ์„ธ๋กœ ๊ธธ์ด๋ณด๋‹ค ๊น๋‹ˆ๋‹ค.

 

๐Ÿ’ก  ์•„์ด๋””์–ด

'๊ฐ€๋กœ = ๋…ธ๋ž‘๊ฐ€๋กœ+2', '์„ธ๋กœ = (๊ฐˆ์ƒ‰ ์ˆ˜+๋…ธ๋ž€์ƒ‰ ์ˆ˜)/๊ฐ€๋กœ' ์ด๋‹ค.

๋…ธ๋ž€์ƒ‰์„ ์–ด๋–ป๊ฒŒ ๋ฐฐ์น˜ํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ์„œ ์นดํŽซ์˜ ๊ฐ€๋กœ, ์„ธ๋กœ ํฌ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ ์ผ๋‹จ ๋…ธ๋ž‘์˜ ์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

์•ฝ์ˆ˜ ์ค‘์—์„œ ๊ธด ๊ฒƒ ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ๋…ธ๋ž‘์˜ ์„ธ๋กœ๋กœ ๋‘๊ณ , ํƒ์ƒ‰ํ•œ๋‹ค.

'๊ฐ€๋กœ * ์„ธ๋กœ = ๊ฐˆ์ƒ‰ ์ˆ˜ + ๋…ธ๋ž€์ƒ‰ ์ˆ˜' ์ด๋ฏ€๋กœ ์ด ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€๋กœ ์„ธ๋กœ๋ฅผ ์ฐพ๋Š”๋‹ค.

 

โœ๏ธ  ํ’€์ด

function solution(brown, yellow) {
  var answer = [];
  let divY = [];
  let X = 0;
  let Y = 0;
  for(let i=1; i<=Math.sqrt(yellow); i++){
  // ์•ฝ์ˆ˜ ์ฐพ๊ธฐ
    if(yellow % i === 0) {
      divY.push(i);
      if(yellow / i != i) divY.push(yellow / i);
    }
  }
  divY.sort((a, b) => b - a);
  // ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ

  for(let i=0; i<divY.length; i++){
  // ์•ฝ์ˆ˜ ์ค‘์—์„œ ํ•˜๋‚˜์”ฉ ๋…ธ๋ž‘์˜ ๊ฐ€๋กœ, ์„ธ๋กœ๋กœ ๋‘๊ณ  ์ด ์นดํŽซ์˜ ๊ฐ€๋กœ ์„ธ๋กœ ๊ตฌํ•˜๊ธฐ
    X = divY[i] + 2;
    if(X < brown && (brown + yellow) % X === 0){
      Y = (brown + yellow) / X;
    }
    if(X * Y === brown + yellow) {
      answer.push(X);
      answer.push(Y);
      break; 
    }
  }
  return answer;
}