본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 4673 셀프 넘버

by 까망 하르방 2022. 2. 25.
반응형

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

댓글