티스토리 뷰

문제. 

n을 d(n)의 생성자라고 한다. 위의 수열에서 33은 39의 생성자이고, 39는 51의 생성자, 51은 57의 생성자이다. 생성자가 없는 숫자를 셀프 넘버라고 한다. 100보다 작은 셀프 넘버는 총 13개가 있다. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97 10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

 

입출력.

10,000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 증가하는 순서로 출력한다.

 

방법.

i 라는 생성자를 가지는 sum을 구해서 반환하는 함수 d를 만든다. sum의 값이 10000보다 큰 경우 0을 반환하고, 0이 아닌 경우에만 해당 인덱스에 저장한다.

#include <stdio.h>
int d(int i);
int main() {
    //문제04673 / 2021.02.28
    int arr[10001] = {0,};  //모두 0으로 초기화, 생성자가 있는 경우 +1
    int idx=0;

    for(int i=1; i<10001; i++){
        idx = d(i);
        if(idx!=0) arr[idx]+=1;
    }
    for(int i=1; i<10001; i++) {
        if(arr[i]==0) {
           printf("%d\n", i);
        }
    }
    return 0;
}

int d(int i){    
    int sum = i, n = i;
    while(n!=0) {
        sum+=n%10;    
        n/=10;   
    }		
    if (sum<10001) return sum;
    else return 0;
}

 

Insight.

처음 코드를 짰을 때 sum의 값이 10001보다 작다는 조건을 주지 않아서 런타임 오류가 발생해서 한참 고민했다. 그리고 처음에는 if문을 사용해서 100보다 작은수, 1000보다 작은수, 10000보다 작은 수를 구분 조건을 주다가 런타임오류를 잡던 중에 while문으로 바꾸어서 코드를 더 간결하게 할 수 있었다.

 

 

 

 

 

4673번: 셀프 넘버

셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,

www.acmicpc.net

댓글
«   2024/12   »
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
최근에 올라온 글
글 보관함
Total
Today
Yesterday