풀이방법
사용된 것:
함수형 프로그래밍
20022.04.16
모든 요소의 값이 0으로 초기화된, 길이가 10001인 int형 1차원 배열 arr을 만든다.
1부터 10000까지의 모든 정수에 대하여
문제에서 말한 d(n)을 수행할 것이다.
이 때,
어떤 정수 n에 대하여 수행한 d(n)의 결과값을 num이라 할 때
arr[num]에 저장된 값을 1 증가시킨다.
그럼 d(n)의 결과값으로 한 번도 도출된 적이 없는 수들은
arr에서 해당 인덱스에 저장된 값이 0으로 남아있게 된다.
따라서 arr[1]부터 arr[10000]까지 중 0이 저장되어있는 요소가 발견되면 요소의 인덱스 값을 화면에 출력하면 된다.
d(n)을 함수로 구현하여
반복문을 통해 1부터 10000까지의 n에 대하여 d(n)을 수행해야 하므로
함수형 프로그래밍을 사용해야 하는 문제이다.
코드
Java(2022.04.16)
import java.util.Arrays;
public class Main {
static int[] arr;
static void d(int n) {
//1000의 자리, 100의 자리, 10의 자리, 1의 자리의 수
int a = 0;
int b = 0;
int c = 0;
int d = 0;
a = n/1000;
b = (n%1000)/100;
c = (n%100)/10;
d = n%10;
int num = n + a + b + c + d;
if(num<10001) {
arr[num]++;
f(num); //재귀
} else return;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
arr = new int[10001]; //초기값은 0
//1부터 10000까지의 수에 대하여 f를 재귀수행
for(int i = 1; i<10001; i++) {
d(i);
}
StringBuilder sb = new StringBuilder();
for(int i = 1; i<10001; i++) {
//arr[i]의 값이 0이면 i가 셀프 넘버이므로 i를 출력
if(arr[i] == 0) sb.append(i + System.lineSeparator());
}
System.out.print(sb);
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
#2609 : 최대공약수와 최소공배수 (0) | 2022.04.17 |
---|---|
#2930 : 가위 바위 보 (0) | 2022.04.16 |
#1966 : 프린터 큐 (0) | 2022.04.13 |
#11650 : 좌표 정렬하기 (0) | 2022.04.13 |
#10866 : 덱 (0) | 2022.04.13 |