F.R.I.D.A.Y.

BAEKJOON 4673 : 셀프 넘버 for C 본문

DEV/Algorithm

BAEKJOON 4673 : 셀프 넘버 for C

F.R.I.D.A.Y. 2019. 10. 11. 09:39
반응형


 모든 수에 대해 연산을 행하면 속도가 느려지므로 이미 연산을 진행한 데이터를 보관하는 공간을 만들어 연산이 이루어진 숫자라면 시행하지 않도록 코드를 짜는 것이 유리하다. 편하게 재귀함수로 작성을 했지만 재귀함수를 사용하지 않더라도 충분히 작성이 가능하므로 블로그의 코드를 이해했다면 재귀함수를 일반 함수로 구성해보는 것도 좋겠다.


Code.

#include <stdio.h>
#include <malloc.h>
#include <string.h>

void ret(int* memo, int val){
    int sum = val;
    while(val){
        sum += val % 10;
        val /=10;
    }
    if(sum < 10000){
        memo[sum] = 1;
        ret(memo, sum);
    }
}

int main(void){
    int *memo = (int *)malloc(sizeof(int) * 10000);
    memset(memo, 0, sizeof(int) * 10000);

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

참고 사항

 아래 글을 전부 이해한다면 좋겠지만 상대적으로 어렵다 느낄 수 있으므로 재귀함수를 권장하지 않는 이유를 아라보려면 링크된 게시물의 하단 결론 부분을 읽기 바람.

 

재귀 함수를 사용하기 전에 이 글을 읽어보세요.

: C 언어 관련 전체 목차http://blog.naver.com/tipsware/221010831969 1. 재귀 함수(Recursive Functio...

blog.naver.com

 

728x90
반응형

'DEV > Algorithm' 카테고리의 다른 글

BAEKJOON 10845 : 큐 for C  (0) 2019.10.31
BAEKJOON 9012 : 괄호 for C  (0) 2019.10.27
BAEKJOON 1065 : 한수 for C  (0) 2019.10.11
BAEKJOON 1009 : 분산처리 for C  (0) 2019.04.06
BAEKJOON 2839: 설탕 배달 for C  (0) 2019.04.05
Comments