알고리즘

[boj4641/c++]백준 4641번: Doubles

IT 참다랑어 2021. 1. 4. 13:40

https://www.acmicpc.net/problem/4641

 

4641번: Doubles

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

www.acmicpc.net

 

#include <iostream>
using namespace std;

void findDouble(int* num);

int main() {
	int num[15] = { 0, };
	int temp = -2, i = 0; 
    //초기값을 0으로 주니까 while 에서 함수를 실행하길래
    //입력값은 자연수만 주니까 -2로 temp를 선언
	
	while (temp != -1) {
		cin >> temp;
		if (temp == 0) { //한 줄의 테스트 케이스가 모두 입력되면
			findDouble(num); //주어진 조건의 수를 찾는 함수 실행
			for (int k = 0; k < 15; k++) 
            	num[k] = 0; //새로운 테스트 케이스 입력을 받기 위해서 num 배열 리셋
			i = 0;
		}
		else {
			num[i++] = temp;
		}
	}
}

void findDouble(int* num) {
	int cnt = 0, i = 0, j = 0;
	while (num[i] != 0) { //num에 테스트 케이스가 입력되어 있는 경우만 보기때문에
		while (num[j] != 0) { //0이면 while을  탈출하고 다음 실행
			if (num[j] == (num[i] * 2) ||(num[j]*2)==num[i]) { //num을 정렬하지 않아서
				cnt++;
			}
			j++;
		}
		i++;
		j = i; //j를 i로 만들어 줘야 중복 x
	}
	cout << cnt << "\n";
}