BACKJOON, 백준

백준 10951번 중복 숫자

돌맹이떼굴떼굴 2023. 11. 18. 01:57

1. 문제

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    int cnt = 0;
    int arr[11] = { 0, };

    for (int i = 1; i <= 10; i++)
    {
        int A;
        scanf("%d", &A);

        arr[i] = A % 42;
    }

    for (int i = 1; i <= 10; i++)
    {
        for (int j = 1; j <= i; j++)
        { 
            if (i == j)
                cnt++;

            if (arr[i] == arr[j])
                break; 
        }
    }

    printf("%d", cnt);

    return 0;
}

 

2. 해결 방법 

for (int i = 1; i <= 10; i++)
    {
        for (int j = 1; j <= i; j++)
        { 
            if (i == j)
                cnt++;

            if (arr[i] == arr[j])
                break; 
        }
    }

 

arr배열

          i        

 

내가 비교할 arr[i]를 기준으로 j = 1부터 i까지 훑는다. (배열 index가 0부터 시작인데 헷갈려서 index 1번부터 사용함)

 

1. 비교하는 숫자와 동일한 숫자를 만나면 arr[i] == arr[j], break로 탈출하고 arr[i+1]로 넘어간다.

2. 비교하는 숫자와 동일한 숫자가 없다면 j가 진행하다 본인 i와 만나게 된다. 이 때, cnt가 1 증가한다. 동일한 숫자가 없다는 말은 본인과 중복하는 숫자가 없다는 말이다.

 

무식하게 하나씩 비교하는 코드이다.

 

3. 다른 해결 방법

int main()
{
    int cnt = 0;
    int arr[41] = { 0, };

    for (int i = 1; i <= 10; i++)
    {
        int A;
        scanf("%d", &A);

        arr[A % 42] = 1;
    }

    return 0;
}

 

42로 나누면 0부터 41까지의 나머지가 생기고 나머지를 배열로 만든다. arr배열 index에 A % 42를 넣으면 해당 배열 값이 1이 된다. 입력을 모두 받은 다음 배열 값이 1인 index만 count하면 된다.