프로그래밍/백준

3. 백준 3052 나머지 겹치지 않는 숫자 구하기 - c언어

량아이 2022. 7. 15. 00:57

이번 백준문제는 10개의 수를 받고 42로 나눈 나머지 숫자중 안겹치는 숫자의 개수를 세는 문제이다

사실 이 문제는 저번에 풀려고 한번 도전 했었으나 

나머지 숫자중 겹치는 숫자를 알아내는 방법을 모르겠어서 포기한 문제였고

이후에 1.백준 8958번인 ox퀴즈도 연달아 틀리게 되어 나에게 깊은 패배감을 주었던 문제이다.

 

이후 방학때 적어도 백준 하루에 한 문제씩 풀자라는 결심을 하게 되었고 2. 백준 4344 평균은 넘겠지 문제를 통해 자신감을 되찾은 나는 다시 이 문제에 도전을 하게 되었다.

 

전에 겪었던 굴욕을 다시 마주하게 된 나는 쪼큼 걱정을 하게 되었지만 그 걱정이 무색하게 간단하게 문제가 풀렸다.

 

일단 처음엔 기초 베이스인 수를 42로 나눈 나머지를 변수에 저장하고나니 겹치는 숫자를 판단할 만한 식이 필요했으니

아직 애기애긔한 나는 그냥 무식하게 처음부터 받은 수 만큼 하나하나 비교하며 풀기로 했다.

#include <stdio.h>
int main(){
    int i, su[10], cnt=0, dda;
    for(i=0;i<10;i++){ // 수 받고 42로 나눈 나머지 구하기
        scanf("%d",&su[i]);
        su[i]%=42; //나머지
        dda=0; //겹쳐지는 수 판단 변수 '따블'
        for(int j=0;j<i;j++){
            if(su[i]==su[j]){ //이전 숫자와 겹쳐지는 숫자가 있을 시 초기화
                dda=0;
                break;
            }
            dda++;
        }
        if(dda!=0){ //겹쳐지는 수가 없을 시 카운트
            cnt++;
        }
    }
    printf("%d",cnt);
}​

한번방식을 정하고 나니 코드는 막히는 것 없이 술술 풀렸다.

일단 한번 짜본 처음 초안의 결과는

백준 3052

첫 시도치곤 결과가 상당히 괜찮게 나왔다.

 

틀린 이유에 대해 생각해보니 카운트가 9가 나온이유는 첫 숫자를 못세기 때문이라는 것을 발견

cnt 만 1로 초기화해두면

#include <stdio.h>
int main(){
    int i, su[10], cnt=1, dda;
    for(i=0;i<10;i++){ // 수 받고 42로 나눈 나머지 구하기
        scanf("%d",&su[i]);
        su[i]%=42; //나머지
        dda=0; //겹쳐지는 수 판단 변수 '따블'
        for(int j=0;j<i;j++){
            if(su[i]==su[j]){ //이전 숫자와 겹쳐지는 숫자가 있을 시 초기화
                dda=0;
                break;
            }
            dda++;
        }
        if(dda!=0){ //겹쳐지는 수가 없을 시 카운트
            cnt++;
        }
    }
    printf("%d",cnt);
}

백준 3052 나머지

문제 클리어!