2의 거듭제곱 판별하기, powerOfTwo

2021. 8. 9. 23:07
반응형

Javascript
문제 : 수를 입력받아 2의 거듭제곱인지 여부(boolean 타입)를 리턴해야 합니다.

주의사항 : 반복문(while)을 사용해야 합니다. 2의 0승은 1입니다. Number.isInteger, Math.log2, Math.log 사용은 금지 됩니다.

나는 이렇게 수를 입력받아 2의 거듭제곱인지 여부(boolean 타입)를 리턴하는 함수를 구현했다. 그리고 지금 다시 보니 첫번째 조건문에 "num === 2"라는 조건은 없어도 된다.
이렇게 만들고 레퍼런스 코드는 어떤지 확인해 보았는데, 레퍼런스 코드는 조금 달랐다.

처음 조건문은 1을 입력받으면 그냥 true를 출력하게 했고,
두번째 조건문은 짝수이면 false를 출력해라??,
그리고 초기 거듭제곱수(powered)를 2로 할당해주고, powered가 num(입력받은 수)보다 작으면 계속 실행해라는 반복문을 통해서 powered에 2를 계속 곱하고 powered가 입력받은 수와 같아지면 true, 아니면 false값을 출력해서 거듭제곱 수 인지 여부를 리턴하는 함수를 구현해 놓은 듯 하다.

두번째 조건문이 처음 봤을 때는 이해가 바로 안됐다. 왜냐하면 그냥 봤을 때 짝수이면 false를 출력해라 라고 보았기 때문이다. console창에 쳐보면서 고민해본 결과 (num % 2)는 num을 2로 나눈 나머지를 말하는데, num을 2로 나눠서 0이 되면, 이 두번째 조건문은 실행이 되지않는다. 왜냐하면, 0은 false이기 때문이다. 이 조건문을 다시 풀어서 이야기 하면, 짝수이면 이 조건문을 실행하지 말고, 홀수이면 그냥 false를 리턴해라 라는 말이된다. 그리고 2라는 수를 하나 만들어서 반복문을 통해서 2를 계속 곱하게 만들고, 2가 계속 곱해진 수와 num(입력받은 수)가 같아지면 true 아니면 false를 출력하게 된다.

내가 한것과 레퍼런스를 비교해 보았을때, 나는 입력받은 수를 나누는 것을 반복해서 1이되도록 하는 방법을 사용했고, 레퍼런스는 2를 계속 곱해서 입력받을 수와 같아지도록 하는 방법을 사용했다. 그리고 레퍼런스 코드가 확실히 간결하다. 코드가 간결해지다 보니 가독성도 좋아진다. 누가봐도 이해가 쉽게되는 로직을 구현하는 것이 좋기 때문에 레퍼런스처럼 간결한 코드를 짤 수 있도록 생각하는 연습을 해야할 것 같다.

반응형
LIST

BELATED ARTICLES

more