https://jojelly.tistory.com/90
4673 셀프넘버 JAVA 백준 문제풀이
처음엔 무슨말인지 잘 이해가 되지않아 한참을 보았다. 요점은 1~10000이하의 생성자가 없는 수 를 구하는것. [접근방식] 1.boolean 배열을 선언하여 셀프 넘버를 구분했다. (1~10000이하의 수 이기 때
jojelly.tistory.com
private static int d(int x) {
int sum = x;
while(x != 0) {
sum = sum + (x % 10); //1의 자리를 누적하여 sum
x = x / 10; //1의 자리 연달아 제거
}
return sum;
}
public static void main(String[] args){
boolean[] evals = new boolean[10001]; //1~10000 평가
int evalsNum = evals.length;
for(int i=1; i<evalsNum; i++) {
int noSelfNum = d(i);
if(noSelfNum < evalsNum) {
evals[noSelfNum] = true; //셀프넘버는 false
}
}
for(int i=1; i<evalsNum; i++) {
if(!evals[i]) { //셀프넘버만 출력
System.out.println(i);
}
}
}
이 문제를 풀면서 자릿수들을 구하는 일종의 공식이 있음을 파악했다.
그 동안은 모듈러 연산과 나눗셈 연산을 통해 원하는 자릿값을 얻어내는 것에 그쳤지만 이에 while을 더하면 어떠한 값이 오더라도 자릿수들을 구할 수 있다.
또한 boolean타입의 배열 인덱스와 숫자를 같게 매칭시킨 배열을 활용해 체크하는 법을 배웠다.
안타깝게도 내 머리에서 나온 소스들이 아니기에 내걸로 만들기 위해 피드백 한다.
'Java > Problem Solving' 카테고리의 다른 글
BOJ 1316번 - 그룹 단어 체커 (4) | 2022.06.19 |
---|---|
BOJ 2577번 - 숫자의 개수 (0) | 2022.06.12 |
BOJ 1110번 - 더하기 사이클 (0) | 2022.06.12 |