[백준] 4673: 셀프 넘버
5748 단어 Problem SolvingCC
문제
[Silver_V] 정답 비율: 48%
https://www.acmicpc.net/problem/4673
생각
- 생성자를 찾기는 힘들다. 배열을 만들고 생성자가 있는 수를 따로 표시해서 제외하는 방향으로 하자.
- 생성자를 찾는 계산은 따로 함수로 만들자
배운 점
- 처음엔 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;
}
Author And Source
이 문제에 관하여([백준] 4673: 셀프 넘버), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@yeob-yi/boj-4673
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
- 처음엔 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;
}
Author And Source
이 문제에 관하여([백준] 4673: 셀프 넘버), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@yeob-yi/boj-4673
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#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;
}
Author And Source
이 문제에 관하여([백준] 4673: 셀프 넘버), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yeob-yi/boj-4673저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)