https://www.acmicpc.net/problem/4673
4673번: 셀프 넘버
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,
www.acmicpc.net
문제의 키 포인트
1. d(75) = 75+7+5 = 87 과 같은 식으로 나아간다는 규칙.
2. 최종 수는 10000보다 작다는 점.
소스코드(SourceCode)
#include<stdio.h>
#include<stdbool.h>
#define N 10001 // 10000보다 작은 수 이므로
int self_number(int n); // 셀프넘버 함수 선언
bool arr[N];
int main(void)
{
int i, num;
for (i = 1; i < N; i++)
{
num = self_number(i);
if (num <= N)
{
arr[num] = true;
}
}
// 출력부
for (i = 1; i < N; i++)
{
if (!arr[i]) // arr[i] == false와 같은 의미
{
printf("%d\n", i);
}
}
return 0;
}
// 셀프 넘버 함수 정의
int self_number(int n)
{
int sum = n;
while (1) // 무한 반복문으로 생성자 계산
{
if (n == 0)
{
break; // 0이 되면 종료
}
else
{
sum += n % 10; // 1의 자리 더해주기
n = n / 10; // 한자리씩 없애기
}
}
return sum;
}
코딩 스킬(Coding Skill)
1. 생성자를 계산할 때 각 자리 수 10, 100, 1000, 10000 자리마다 if 조건문을 걸어서 표현도 가능하지만 위와 같이 while(1) 무한 반복문을 활용하면 코드가 한결 깔끔해집니다.
그럼 오늘도 즐거운 코딩!
반응형
'코딩 | 알고리즘 & 문제풀이 > 백준_Backjoon' 카테고리의 다른 글
[C언어] Backjoon_Code 11654, 아스키 코드 출력하기 (0) | 2021.07.04 |
---|---|
[C언어] Backjoon_Code 1065, 한수 구하기 (0) | 2021.07.03 |
[C언어] Backjoon_Code 15596, 정수 N개의 합 (0) | 2021.07.01 |
[C언어] Backjoon_Code 4344, 평균을 넘는 학생의 비율 (0) | 2021.06.30 |
[C언어] Backjoon_Code 8958, OX퀴즈 (0) | 2021.06.29 |