일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
- 포스코 ai 교육
- DP
- 딥러닝
- TensorFlow Lite
- 삼성코테
- sort
- bfs문제
- 코테 문제
- 삼성코딩테스트
- dfs문제
- tflite
- 초소형머신러닝
- tinyml
- 알고리즘
- 자료구조
- DP문제
- 포스코 교육
- 컴퓨팅사고
- MCU 딥러닝
- 삼성역량테스트
- 삼성역테
- 임베디드 딥러닝
- 그리디
- 영상처리
- 포스코 AI교육
- BFS
- 코딩테스트
- 코테
- dfs
- 다이나믹프로그래밍
- Today
- Total
코딩뚠뚠
[백준문제풀이] 4673 셀프 넘버 본문
풀이일시 : 2020-09-21
문제 :
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다.
양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다.
예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다.
33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...
n을 d(n)의 생성자라고 한다. 위의 수열에서 33은 39의 생성자이고, 39는 51의 생성자, 51은 57의 생성자이다. 생성자가 한 개보다 많은 경우도 있다. 예를 들어, 101은 생성자가 2개(91과 100) 있다.
생성자가 없는 숫자를 셀프 넘버라고 한다. 100보다 작은 셀프 넘버는 총 13개가 있다. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97
10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.
입력 :
입력은 없다.
출력 :
10,000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 증가하는 순서로 출력한다.
ex)
1
3
5
.....
9982
9993
풀이 :
33 => 33+3+3 = 39 여기서 33이 생성자
but 이러한 생성자가 없는 숫자들도 있다.
에라토스테네스의 체 알고리즘을 조금 변경하면 풀 수 있다.
-> 특정 숫자의 생성자를 구해놓으면 그 숫자의 생성자를 언제 구하던지 항상 동일한 값이 나온다는 특징을 이용할 수 있을것이다.
#include <iostream>
#define MAX 10001
using namespace std;
int a[MAX];
int d[MAX];
int getNext(int x) {
int sum = x, temp = x, cipher = 1;
while (temp >= 10) { //들어온 숫자의 차수를 구해주는것
cipher++;
temp /= 10;
}
for (int i = 0; i < cipher; i++) { //차수만큼 반복하면서 실행
sum += x % 10; //x를 10으로 나눈 나머지를 더한다.
x /= 10; //x는 x를 10으로 나눈 몫.
}
return sum; //계산된 숫자를 반환해준다.
}
int main() {
for (int i = 1; i < MAX; i++) {
for (int j = getNext(i); j < MAX; j = getNext(j)) {
if (a[j] == 1)continue;
else a[j] = 1; //전체경우에 대해서 생성자a[j]를 =1 처리해준다.
}
}
for (int i = 1; i < MAX; i++) {
if (a[i] == 0) //전체에 대해서 0인것만 다 뽑으면 될것이다.
cout << i << '\n';
}
return 0;
}
'알고리즘 문제풀이 > 백준문제풀이' 카테고리의 다른 글
[백준문제풀이] 1992 쿼드트리 (0) | 2020.12.31 |
---|---|
[백준문제풀이] 1074 Z (0) | 2020.12.31 |
[백준문제풀이] 6588 골드바흐의 추측 (0) | 2020.12.31 |
[백준문제풀이] 1929 소수구하기 (0) | 2020.12.31 |
[백준문제풀이] 1978 소수찾기 (0) | 2020.12.31 |