티스토리 뷰

백준 온라인 저지(BOJ) 4673번 셀프 넘버
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
* 사용언어 : java, 자바
1. 문제
양의 정수 n에 대해 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의
이때 n을 d(n)의 생성자라고 함
예를 들어, d(75) = 75 + 7 + 5 = 87 이면, 75는 87의 생성자임
생성자가 없는 숫자를 셀프 넘버라고 하는데,
10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 모두 출력
2. 풀이
문제에 괜히 무한 수열 얘기가 있어서 처음 문제 이해할 때 조금 헷갈렸습니다.
무한 수열은 이 문제 풀이에는 필요없는 얘기고,
d(n) 함수 처리 방식 그리고 생성자와 셀프 넘버의 정의만 이해하면 됩니다.
생성자가 없는 숫자인 셀프 넘버를 찾는 것이 이 문제의 목표입니다.
셀프 넘버 여부를 알기 위해 d(n)에서 n을 찾아보려 했지만, 방법이 잘 보이지 않습니다.
하지만 반대로 n으로 d(n)을 구하는 것은 쉽습니다.
그래서 아래와 같은 방식으로 풀었습니다.
1) n으로 d(n)을 찾는 함수(getDn)를 만들고, n을 1부터 10000까지 반복하면서 d(n)을 찾았습니다.
2) 크기가 10001인 배열(isNotSelfNumber)을 만들고, d(n)이 되는 숫자가 셀프 넘버가 아니라고(true) 체크하였습니다.
3) 반복을 마친 후 배열에 체크되지 않은(false) 셀프 넘버를 출력하였습니다.
예를 들어
n = 1 이면 d(n) = 1 + 1 = 2 이고, 이 결과로 2는 셀프 넘버가 아닙니다. (배열의 2번 index에 체크)
n = 2 이면 d(n) = 2 + 2 = 4 이고, 이 결과로 4는 셀프 넘버가 아닙니다. (배열의 4번 index에 체크)
...
n = 10000 이면 d(n) = 10000 + 1 + 0 + 0 + 0 + 0 = 10001 이고, 이 결과로 10001은 셀프 넘버가 아닙니다.
(배열 범위를 초과하여 체크 X)
이런식으로 반복한 후에 체크되지 않은 숫자(셀프 넘버)를 모두 출력해주었습니다.
3. 코드
public class Main {
public static void main(String[] args) {
boolean[] isNotSelfNumber = new boolean[10001];
for (int i = 1; i <= 10000; ++i) {
int dn = getDn(i);
if (dn <= 10000) isNotSelfNumber[dn] = true;
}
for (int i = 1; i < isNotSelfNumber.length; ++i) {
if (!isNotSelfNumber[i]) System.out.println(i);
}
}
private static int getDn(int n) {
int dn = n;
while(n > 0) {
dn += n % 10;
n /= 10;
}
return dn;
}
}
* boolean type의 기본값은 false이기 때문에 셀프 넘버가 아닌 항목을 true로 체크하고, 체크되지 않은(false) 항목을 출력했습니다.
'개발자 > 문제풀이 (Java)' 카테고리의 다른 글
| [백준/BOJ] 2448번 별찍기 - 11 (java) (6) | 2018.02.01 |
|---|---|
| [백준/BOJ] 1065번 한수 (java) (0) | 2018.01.24 |
| [백준/BOJ] 1110번 더하기 사이클 (java) (6) | 2018.01.22 |
| [백준/BOJ] 4344번 평균은 넘겠지 (java) (0) | 2018.01.22 |
| [백준/BOJ] 1546번 평균 (java) (5) | 2018.01.08 |
- Total
- Today
- Yesterday
- 시대예보
- 관계가상처가되기전에
- 독서감상평
- 인간본성불패의법칙
- 최재천의공부
- JUNGOL
- 시스템개발자
- 동탄에듀센터
- 정세현의통찰
- 알고리즘
- 정올
- 문현공
- 마침내 특이점이 시작된다
- 나의첫죽음학수업
- 자동차보험
- 쿠프마케팅
- 이용제한
- 당신도느리게나이들수있습니다
- 센터독서클럽
- 아가별
- 이상감지
- 영화감상평
- 동탄에듀센터2
- 자료구조
- 삼성전자
- 여가포인트
- 유연함의힘
- 독서 감상평
- 똑똑하고게으르게
- 세상을 읽는 새로운 언어 빅데이터
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |