문제
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
public class Main4673 {
public static void main(String[] args) {
int[] selfNumber = new int[10001];
selfNumber[0] = 1;
for (int i=1; i<10001; i++) {
int n = d(i);
if (n < 10001) {
selfNumber[n] = 1;
}
}
for (int i=1; i<10001; i++) {
if (selfNumber[i] == 0) {
System.out.println(i);
}
}
}
public static int d(int i) {
int sum = i;
while (i != 0) {
sum += i%10;
i = i/10;
}
return sum;
}
}
1. 사실 틀린 문제나 마찬가지다.
2. 접근 방식은 좋았으나 함수d를 만드는 부분에서 막혔다. 30분 정도 고민하다 결국 타 블로그의 코드를 거의 베끼면서 진행했다.
3. 여러 블로그를 보니 문자열로 파싱 후 인덱스로 각 자리수를 더하는 방법, 내가 참고한 블로그처럼 해당 숫자를 나누면서 각 자리수를 더하는 방법까지 크게 두가지 길이 존재했다. 문제의 본질이 후자에 가깝다 생각되어 선택했다.
4. 이전 문제들에서도 느꼈지만 대상을 단계별로 나누는 사고력이 많이 부족한듯 하다. 시작부터 잘할수는 없지만, 지난 내 삶들에서 생각하기 편하게 모든것을 단순화 시켰던 내 자신을 반성하게 만드는 문제였다.
참고블로그 : https://st-lab.tistory.com/53
'백준' 카테고리의 다른 글
백준 1157번 (0) | 2022.11.01 |
---|---|
백준 11720번 (0) | 2022.10.27 |
백준 2738번 (0) | 2022.10.26 |
백준 1546번 (0) | 2022.10.25 |
백준 5597번 Java (0) | 2022.10.25 |