일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준
- 프로그래밍
- c++
- 연산자
- CS
- tipssoft
- 지식나눔강좌
- Programming
- Tips강좌
- Win32
- 리뷰
- 티스토리
- Tips프로그래밍강좌
- doit코틀린프로그래밍
- 포인터
- Javascript
- Direct2D
- 김성엽
- 이지스퍼블리싱
- Desktop
- Visual Studio
- VS ERROR
- 배열
- Windows
- c
- Kotlin
- 알고리즘
- c#
- 문법
- 함수
Archives
- Yesterday
- Today
- Total
F.R.I.D.A.Y.
BAEKJOON 4673 : 셀프 넘버 for C 본문
반응형
모든 수에 대해 연산을 행하면 속도가 느려지므로 이미 연산을 진행한 데이터를 보관하는 공간을 만들어 연산이 이루어진 숫자라면 시행하지 않도록 코드를 짜는 것이 유리하다. 편하게 재귀함수로 작성을 했지만 재귀함수를 사용하지 않더라도 충분히 작성이 가능하므로 블로그의 코드를 이해했다면 재귀함수를 일반 함수로 구성해보는 것도 좋겠다.
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;
}
참고 사항
아래 글을 전부 이해한다면 좋겠지만 상대적으로 어렵다 느낄 수 있으므로 재귀함수를 권장하지 않는 이유를 아라보려면 링크된 게시물의 하단 결론 부분을 읽기 바람.
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