๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“‚ Base/์•Œ๊ณ ๋ฆฌ์ฆ˜

2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฆฌํ„ดํ•˜๊ธฐ

by Dev. Ella 2023. 3. 21.

๐Ÿ“œ ๋ฌธ์ œ

์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฆฌํ„ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

โš ๏ธ ์ฃผ์˜์‚ฌํ•ญ

- ๋ฐ˜๋ณต๋ฌธ(while)๋ฌธ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
- 2์˜ 0์Šน์€ 1์ž…๋‹ˆ๋‹ค.
- Number.isInteger, Math.log2, Math.log ์‚ฌ์šฉ์€ ๊ธˆ์ง€๋ฉ๋‹ˆ๋‹ค.

 

โœ๐Ÿป ๋‚ด ํ’€์ด

function powerOfTwo(num) {
  // ์ž…๋ ฅ: num
  // ์ถœ๋ ฅ: 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์ธ์ง€ ์—ฌ๋ถ€ boolean ํƒ€์ž… ๋ฆฌํ„ด
  // ์ฃผ์˜: while๋ฌธ ์‚ฌ์šฉ, 2์˜ 0์Šน์€ 1

  // num์ด 1์ด๋ฉด ๋ฌด์กฐ๊ฑด true
  if (num === 1) {
    return true;
  }
  // num์ด ํ™€์ˆ˜๋ฉด ๋ฌด์กฐ๊ฑด false
  if (num % 2 === 1) {
    return false;
  }
  // 2๋ฅผ ๊ฑฐ๋“ญ์ œ๊ณฑํ•ด์„œ ๋น„๊ตํ•  ์ˆ˜์˜ ์ดˆ๊ธฐ๊ฐ’์€ 2
  let poweredNum = 2
  
  // poweredNum์ด num๋ณด๋‹ค ์ž‘์„๋•Œ๊นŒ์ง€๋งŒ while๋ฌธ ์ง„ํ–‰
  while(poweredNum < num) {
    poweredNum = poweredNum * 2;
  }
  // ๋ฐ˜๋ณต์ด ๋๋‚˜๋ฉด poweredNum์™€ num์ด ๊ฐ™์€์ง€ ๋น„๊ต๊ฐ’ ๋ฆฌํ„ด
  return poweredNum === num;
}

 

๐Ÿ’ก ์•Œ์•„๋‘๋ฉด ์ข‹์„ ๊ฐœ๋…

์กฐ๊ฑด๋ฌธ, while ๋ฐ˜๋ณต๋ฌธ

 

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ๋ฐฐ์šด ์ 

1. ๋น„๊ตํ•  ์ˆซ์ž๋Š” ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •์„ ํ•ด์ค„ ๊ฒƒ

2. ํŠน์ • ์ˆซ์ž๊ฐ€ ํ™€์ˆ˜์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

  // 1. num์ด ํ™€์ˆ˜๋ฉด ๋ฌด์กฐ๊ฑด false
  if (num % 2 === 1) {
    return false;
  }
  
  // 2. num์ด ํ™€์ˆ˜๋ฉด ๋ฌด์กฐ๊ฑด false
  if (num % 2) {
    return false;
  }

๋Œ“๊ธ€