도토리 줍는 개발자 감자
백준 4673 셀프넘버 JAVA - jimoo 본문
https://www.acmicpc.net/problem/4673
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다.
양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다.
생성자가 없는 숫자를 셀프 넘버라고 한다. 즉, d(n)함수로 만들 수 없는 숫자가 셀프넘버이다.
방법
1. 셀프넘버인지 체크하는 0~10000 범위의 boolean 배열(배열명: check)을 선언한다.
선언하면 모든 배열의 값이 false 값을 가지게 된다.
(주의: 배열크기를 10000으로 선언하면 0~9999까지 저장된다. 따라서 배열크기를 10001로 선언해야한다.)
2. d(1)= 1+1=2, d(2) = 2+2=4, d(3)=3+3=6, ... ,d(9999)=9999+9+9+9+9, d(10000)
1~10000 까지 d(n)을 실행하면서 나온 결과값을 check 배열에 true로 저장한다.
3. check 배열을 1~10000까지 모두 접근하면서 false인 값을 가지는 인덱스만 출력한다.
d(n) funtion 설명
d(n) 함수는 매개변수로 들어온 n 과 n의 각 자리수를 더하는 함수입니다.
d(1234) = 1234 + 1 + 2 + 3 + 4
아래의 코드로 설명을 하겠습니다.
함수가 실행 됐을 때, sum을 매개변수 num으로 초기화합니다.
그리고 while문으로 들어가게 됩니다. 처음 while 문에 들어왔을 때,
sum = sum+(num%10); <-- 1234 + 4 가 적용됩니다!
num = num/10; <-- 1234 / 10 = 123
두 번째 while 문에 들어왔을 때
sum = sum+(num%10); <-- (1234 + 4) + 3 가 적용됩니다!
num = num/10; <-- 123 / 10 = 12
세 번째 while 문에 들어왔을 때
sum = sum+(num%10); <-- (1234 + 4 + 3) + 2 가 적용됩니다!
num = num/10; <-- 12 / 10 = 1
네 번째 while 문에 들어왔을 때
sum = sum+(num%10); <-- (1234 + 4 + 3 + 2) + 1 가 적용됩니다!
num = num/10; <-- 1 / 10 = 0
다섯번째 while 문에 들어왔을 때는 num이 0이므로 조건을 만족하지 않아 while문이 종료되게 됩니다.
그러면 최종적으로 1234 + 4 + 3 + 2 + 1 이 저장된 sum이 return 됩니다.
public static int d(int num){
int sum = num;
while (num!=0){
sum = sum + (num%10);
num = num/10;
}
return sum;
}
전체 코드
public class Main {
public static int d(int num){
int sum = num;
while (num!=0){
sum = sum + (num%10);
num = num/10;
}
return sum;
}
public static void main(String[] args){
// 1~10000사이의 셀프넘버를 구해야한다.
// 인덱스는 0부터 시작하기 때문에 배열크기를 10001으로 지정해야한다. (0~10000 인덱스 생성)
boolean[] check = new boolean[10001];
// 셀프 넘버가
for(int i=1;i<=10000;i++){
int n = d(i);
if (n<10001){
check[n] = true;
}
}
// 셀프 넘버 출력
for (int i = 1; i<=10000; i++){
if (!check[i]){
System.out.println(i);
}
}
}
}
어려운 문제는 아닌 것 같네요!
'알고리즘공부' 카테고리의 다른 글
백준 22871 징검다리 건너기(large) java 자바 - jimoo (2) | 2021.11.27 |
---|---|
프로그래머스 월간 코드 챌린지 시즌1 > 풍선터트리기 Kotlin 코틀린 - jimoo (0) | 2021.10.25 |
프로그래머스 그래프 순위 파이썬 - jimoo (0) | 2021.09.24 |
프로그래머스 위클리챌린지 5주차_모음사전 파이썬 -jimoo (0) | 2021.09.20 |
프로그래머스 스택/큐 주식가격 파이썬(list queue와 deque) - jimoo (0) | 2021.09.10 |