문제 설명
여러분은 Q개의 쿼리를 수행해야 합니다. 수행해야 하는 쿼리는 다음과 같습니다.
어떤 수 a를 2의 거듭제곱 꼴로 나타낼 수 있는가?
입력
첫 줄에 Q가 주어집니다. (1 ≤ Q ≤ 106)
두 번째 줄부터 Q+1번째 줄까지 a가 주어집니다. a는 1이상 231-1이하 자연수입니다.
출력
각 쿼리마다, 답이 Yes이면 1을, 그렇지 않으면 0을 출력합니다.
소스 코드
#include <iostream>
using namespace std;
int main() {
int t;
cin >> t;
int a[t], result[t];
for ( int i = 0; i < t; i++ )
{
cin >> a[i];
if ( a[i] == 1 ) result[i] = 1;
while ( a[i] / 2 > 0 )
{
if ( (a[i] / 2) * 2 != a[i] )
{
result[i] = 0;
break;
}
if ( (a[i] / 2) == 1)
{
result[i] = 1;
break;
}
a[i] = a[i] / 2;
}
}
for ( int i = 0; i < t; i++ ) cout << result[i] << "\n";
}
문제 풀이
1. 테스트 케이스의 개수 t를 입력받는다.
2. t번 반복하며 k(숫자)를 입력 받는다.
3. result 배열은 선언해, 각 k의 경우를 비교한다.
- (1) k가 1인 경우는 result 배에 1 저장한다.
- (2) 아닌 경우, while문을 돌리면서 k를 2로 나눈다.
#1. 나눈 몫 * 2가 기존 k의 값과 같지 않다면, 홀수 경우로 result 배열에 0을 저장한다.
#2. 마지막 까지 갔을 때, 몫이 1로 나오면, 2의 거듭제곱꼴이므로, result 배열에 1을 저장한다.
'Koala - 13기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/python] 11944번: NN (0) | 2024.01.13 |
---|---|
[백준/python] 10871번: X보다 작은 수 (0) | 2024.01.13 |
[백준/C++] 2908: 상수 (0) | 2024.01.13 |
[백준/C++] 14652번 : 나는 행복합니다~ (0) | 2024.01.13 |
13기 기초 알고리즘 스터디 출석부 (0) | 2024.01.09 |