https://www.acmicpc.net/problem/15917
15917번: 노솔브 방지문제야!!
어떤 수 a가 2의 거듭제곱꼴로 나타내어진다고 해 봅시다. 그렇다면, a = 2n (단 n ≥ 0인 정수) 를 만족할 겁니다. 보통, 각 비트별로 검사를 하면서, 켜져 있는 비트의 개수를 알아내는 것도 좋은
www.acmicpc.net
풀이
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
int q;
int a;
scanf("%d", &q);
int* pa = (int*)malloc(sizeof(int) * q); // 동적 할당으로 q개만큼 a에 대한 값 저장
for (int i = 0; i < q; i++) { //q개만큼 반복
scanf("%d", &a);
int j = 0;
while (pow(2,j) <= a){ // 2의 j제곱이 a값 이하일때만 반복
if (a == pow(2, j)) { // 2의 j제곱이 a값이랑 같을때
pa[i] = 1; // pa[i]에 1값 저장
break;
}
else
pa[i] = 0; // pa[i]에 0값 저장
j++;
}
}
for (int i = 0; i < q; i++) printf("%d\n", pa[i]); // pa를 모두 출력
free(pa); // 동적 할당 제거
return 0;
}
1, 0 값을 한꺼번에 출력을 위해 배열을 사용해도 되지만
연습 목적으로 동적할당을 써봤다.
필자는 힌트의 2진법 풀이로 풀지않고 직접 거듭제곱을 탐색해서 풀어봤다.
pow() = 거듭제곱 함수
'코딩 > 백준 문제 (브론즈)' 카테고리의 다른 글
[백준/2903/C언어] 중앙 이동 알고리즘 _ 풀이 (0) | 2023.08.18 |
---|---|
[백준/2444/C언어] 별 찍기 - 7 _ 풀이 (0) | 2023.08.18 |
[백준/5086/C언어] 배수와 약수 _ 풀이 (0) | 2023.08.17 |
[백준/5622/C언어] 다이얼 _ 풀이 (0) | 2023.08.17 |
[백준/5524/C언어] 입실 관리 _ 풀이 (0) | 2023.08.17 |