백준 알고리즘

[C언어] 백준알고리즘 4641번 Doubles 문제

컴공코딩러 2019. 2. 9. 12:55

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


문제


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




출력


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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>
void doubles()
{
    int arr[201= { 0 };
    int arr2[201= { 0 };
    int N;
    int cnt = 0;
    int i;
    int cnt2 = 0;
    //N을 입력받고 arr[N]번째를 숫자 1로 입력시켜서
    //N번째가 들어왔다는것을 입력받고 arr2에 그 값들을 넣음
    //그래서 arr의 배열의 arr2[]의 *2 값이 1이면 더블인값이있는것이므로 cnt증가
    while (1
    {
        scanf("%d"&N);
        if (N == -1)
            break;
        if (N == 0)
        {
            for (i = 0;i < cnt;i++)
            {
                if (arr[arr2[i]*2]==1
                    cnt2++;
            }
            printf("%d\n", cnt2);
            for (i = 0;i < cnt;i++//arr 함수들 초기화
            {
                arr[arr2[i]] = 0;
                arr2[i] = 0;
            }
            cnt = cnt2 = 0;
        }
        else
        {
            arr2[cnt++= N;
            arr[N] = 1;
        }
 
    }
}
int main()
{
    doubles();
}
cs