본문 바로가기

백준/C++

[Baekjoon/C++] 4641번 - Doubles

[백준] Baekjoon Online Judge

문제로 이동

 

문제

2~15개의 서로 다른 자연수로 이루어진 리스트가 있을 때, 이들 중 리스트 안에 자신의 정확히 2배인 수가 있는 수의 개수를 구하여라.

예를 들어, 리스트가 "1 4 3 2 9 7 18 22"라면 2가 1의 2배, 4가 2의 2배, 18이 9의 2배이므로 답은 3이다.

 

입력

입력은 여러 개의 테스트 케이스로 주어져 있으며, 입력의 끝에는 -1이 하나 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 2~15개의 서로 다른 자연수가 주어진다. 각 자연수는 100보다 작으며, 리스트의 끝은 0으로 판별한다(0은 리스트에 속하지 않는다).

 

출력

각 테스트 케이스마다 한 줄에 걸쳐 정답을 출력한다.

 


풀이

#include <iostream>
using namespace std;

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

	while (true) {
		int n, cnt = 0;
		bool arr[101] = { false };

		while (true) {
			cin >> n;

			if (n == 0 || n == -1) break;

			arr[n] = true;
		}

		if (n == -1) break;
        
        // 입력 받을 수 있는 최댓값이 100이므로 50까지만 탐색하면 된다.
		for (int i = 1; i < 51; i++) {
			if (arr[i] && arr[i * 2]) cnt++;
		}

		cout << cnt << '\n';
	}

	return 0;
}