[백준] 4673: 셀프 넘버

5748 단어 Problem SolvingCC

문제

[Silver_V] 정답 비율: 48%

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

생각

  1. 생성자를 찾기는 힘들다. 배열을 만들고 생성자가 있는 수를 따로 표시해서 제외하는 방향으로 하자.
  2. 생성자를 찾는 계산은 따로 함수로 만들자

배운 점

  • 처음엔 result가 10000보다 큰 수가 나오면 바로 종료시켰는데, 그랬더니 뒷부분의 생성자가 있는 수들 중에 몇 개가 제외되지 않고 그대로 출력되었다.
    알고보니 반복의 마지막즈음에 result가 10000보다 커졌다가 다시 작아지는 부분이 있었다.
    -> 반복의 끝부분까지 꼼꼼히 확인해보자. 항상 증가하거나 항상 감소하지 않을 수 있다.
  • 이거,,, 생각보다 실버도 풀만 하잖아,,,?

코드

#include <stdio.h>

int calculate(int num);

int main(){
    int result=0;
    int check[10000] = {0, };
    result = calculate(1);
    for(int i=2; i<10000; i++){
        if(result-1 < 10000)
            check[result-1] = 1;
        result = calculate(i);
    }

    for(int i=0; i<10000; i++){
        if(check[i]==0)
            printf("%d\n", i+1);
    }
}

int calculate(int num){
    int ans;

    ans = num;
    do{
        ans += num%10;
    }while((num/=10) != 0);

    return ans;
}

좋은 웹페이지 즐겨찾기