[11966번] 2의 제곱인가?
Algorithm/백준 문제 풀이

[11966번] 2의 제곱인가?

반응형

백준 11966번: 2의 제곱인가?

 

11966번: 2의 제곱인가?

자연수 N이 주어졌을 때, 2의 제곱수면 1을 아니면 0을 출력하는 프로그램을 작성하시오.

www.acmicpc.net

2의 제곱인지를 검사하는 문제입니다.

입력되는 값 $N$의 범위가 $ 1 \leq N \leq 2^{30} $ 이라서 int 범위 안에서 조절할 수 있다는 걸 알 수 있었습니다.

 

그리고 2로 계속 나누면서 feasibility를 검사하는 것은 시간 초과가 나올 것 같다는 생각이 들었습니다.

그래서 저는 문제의 제목이 2의 제곱인만큼 비트를 검사하는 것이 아닐까라고 생각했습니다.

이를 검사하기 위해 비트 연산을 사용하여 풀려했습니다.

접근법은 2의 제곱수의 특징에서 보았는데, 단 하나의 1과 나머지 0으로 이루어진 이진수가 2의 제곱수이므로 1의 비트수를 세어주어 1개를 넘을 시 2의 제곱수가 아닌 것으로 판단하였습니다.

 

[소스 보기]

반응형