반응형
Approach
출처: https://www.acmicpc.net/problem/4673
1 → 1 + 1 = 2 ("2" 셀프넘버가 아니다.)
2 → 2 + 2 = 4 ("4" 셀프넘버가 아니다.)
3 → 3 + 3 = 6 ("6" 셀프넘버가 아니다.)
...
위 과정을 {숫자} + {각 자리 수} <= 10000 인지 확인하면서
셀프넘버 여부를 구하면 된다.
for문으로 arr[] 배열에 여부를 표시해가며
셀프넘버인 경우에만 값을 출력하고 그 숫자를 생성자로 한다.
#include <stdio.h>
const int MAX_N = 10000 + 1;
bool arr[MAX_N] = { false, };
int val;
int generator(int num)
{
int ret = num;
while (num != 0)
{
ret += num % 10;
num /= 10;
}
return ret;
}
int main()
{
for (int i = 1; i < MAX_N; i++)
{
if (!arr[i])
{
printf("%d\n", i);
}
// 셀프넘버로 생성된 숫자는 셀프 넘버가 아니다.
val = generator(i);
if (val < MAX_N)
{
arr[val] = true;
}
}
}
Java
public class Main {
public static void main(String[] args) {
int N = 10000;
int []array = new int[N];
for(int i=0 ; i<N; i++ ){
array[i] = 0;
}
for(int i=0; i<N; i++){
if(array[i] == 0){
System.out.println(i+1);
int sum = i+1;
while(sum <= N){
int temp = sum;
while(temp/10 !=0){
sum = sum + (temp%10);
temp = temp / 10;
}
sum = sum + temp;
if(sum <= N){
array[sum-1] = 1;
}
}
}
}
}
}
반응형
'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글
[BOJ] 백준 4948 베르트랑 공준 (0) | 2022.02.28 |
---|---|
[BOJ] 백준 10866 덱 (0) | 2022.02.25 |
[BOJ] 백준 11441 합 구하기 (0) | 2022.02.23 |
[BOJ] 백준 11653 소인수분해 (0) | 2022.02.22 |
[BOJ] 백준 2920 음계 (0) | 2022.02.20 |
댓글