백준 4641 Doubles C++

2023. 9. 18. 18:37알고리즘문제 풀이/백준

문제

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은 리스트에 속하지 않는다).

출력

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

 

풀이

브루트 포스 알고리즘(완전 탐색 알고리즘)을 이용해서 각 항이 2배가 되는지 여부를 일일이 체크해준다.

#include <iostream>
using namespace std;

int main() {
	int a[16], n, count;
	while (a[0] != -1) {
		count = 0;
		for (int i = 0; i < 16; i++) {
			cin >> a[i];
			if (a[i] == -1) {
				return 0;
			}
			if (a[i] == 0) {
				n = i;
				break;
			}
		}
		for (int i = 0; i < n; i++) {
			for (int j = i + 1; j < n; j++) {
				if ((a[i] == 2 * a[j]) || (a[j] == 2 * a[i])) {
					//check if a[i] and a[j] are doubles.
					//cout << "i: " << i << " j: " << j << '\n';
					count += 1;
				}
			}
		}
		cout << count << '\n';
	}
	return 0;
}

'알고리즘문제 풀이 > 백준' 카테고리의 다른 글

백준 5430 AC C++  (0) 2023.09.19
백준 4999 아! Python  (0) 2023.09.18
백준 3190 뱀 C++  (0) 2023.09.18
백준 3052 나머지 C++  (2) 2023.09.18
백준 2920 음계 C++  (0) 2023.09.18