본문 바로가기
PS(Problem Solving)/백준_BOJ

[백준] 15917번 - 노솔브 방지문제야!! (C++) 문제 및 풀이

by 초코칩프라푸치노 2021. 3. 25.

문제) 백준 - 수학(Mathematics) - 노솔브 방지문제야!!

www.acmicpc.net/problem/15917

 

15917번: 노솔브 방지문제야!!

어떤 수 a가 2의 거듭제곱꼴로 나타내어진다고 해 봅시다. 그렇다면, a = 2n (단 n ≥ 0인 정수) 를 만족할 겁니다. 보통, 각 비트별로 검사를 하면서, 켜져 있는 비트의 개수를 알아내는 것도 좋은

www.acmicpc.net

 

 

완전 탐색을 이용한 풀이)

#include <iostream>
#include <algorithm>

using namespace std;
int q;
bool isTwo(int n) {
	for (int i = 0; i < 31; ++i) {
		if (pow(2, i) == n) return true;
	}
	return false;
}
int main() {
    ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	cin >> q;
	for (int i = 0; i < q; ++i) {
		int a;
		cin >> a;
		if (isTwo(a)) cout << 1<< "\n";
		else cout << 0 << "\n";
	}
	return 0;
}

 

 

비트 연산을 이용한 풀이)

#include <iostream>
#include <algorithm>
using namespace std;
int q;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	cin >> q;
	for (int i = 0; i < q; ++i) {
		int a;
		cin >> a;
		if ((a & (-a)) == a) cout << 1<< "\n";
		else cout << 0 << "\n";
	}
	return 0;
}

 

 

반응형

댓글