알고리즘
[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";
}