자바 백준 4673번
실버 5
https://www.acmicpc.net/problem/4673
문제 보기
분류: 수학, 구현, 브루트포스 알고리즘
문제 풀기
셀프 넘버인지 아닌지를 판단하기 위해 10_000 개의 배열의 Index 를 활용한다.
자기 자신과 각 자리의 합으로 이루어진 숫자는 셀프 넘버가 아니기때문에 배열에 1 로 표시를 해놓는다.
10_000 까지의 숫자를 모두 돌고 나서 배열에 1 이 아닌 0 이 되는 숫자의 index 를 모두 출력하여 답안을 제출한다.
코드 보기
import java.util.Arrays;
public class Main {
public static void main (String[] args){
int[] tenthousandArr = new int[11_000]; // 셀프 넘버인지 아닌지를 판단할 10_000 개 이상 배열을 넉넉하게 생성.
int num = 0;
while (num <= 10_000) { // 0 부터 10_000 까지 순차적으로 숫자를 대입.
char[] chrNum = new char[String.valueOf(num).length()]; // 입력된 숫자를 char 타입으로 변경하기 위해 입력된 숫자의 자릿수 만큼 char 배열 생성.
chrNum = Integer.toString(num).toCharArray(); // 생성된 char 배열에 순차적으로 넘어오는 num 을 int -> String -> char 로 변경하여 배열에 저장.
// System.out.println(Arrays.toString(chrNum)); // TEST PRINT
int sumNum = fnSumChar (chrNum); // 각 자리의 숫자들의 합을 구하기 위한 함수에 chrNum 배열 넘김.
// System.out.println(sumNum); // TEST PRINT
int isNotSelfNumber = num + sumNum; // 원래 숫자 num 과 각자리의 합 결과인 sumNum 을 더함. 이 숫자는 셀프 넘버가 아님.
// System.out.println(selfNumber); // TEST PRINT
tenthousandArr[isNotSelfNumber] = 1; // 초기 생성된 10_000 개 이상의 배열에서 해당하는 index 에 1 을 표시. 이 위치는 셀프 넘버가 아님.
num += 1;
}
// System.out.println(Arrays.toString(tenthousandArr)); // TEST PRINT
for (int i = 0; i < 10_000; i++) { // 모두 판단된 배열에서 지금까지 표시한 1 이 아닌 0 이면 그 index 출력.
if (tenthousandArr[i] == 0) {
System.out.println(i);
}
}
}
public static int fnSumChar (char[] chrNum){ // chrNum 배열을 입력 받아 배열 안의 모든 수를 더하여 int 로 return.
int total_sum = 0;
for (int n : chrNum) {
total_sum += n - '0'; // char 타입의 데이터를 int 타입으로 변경.
}
return total_sum;
}
}
'공부하기 > 백준' 카테고리의 다른 글
[Java] 백준 풀기 2438 - 별 찍기 1 (0) | 2023.01.24 |
---|---|
[Java] 백준 풀기 10817 - 세 수 (0) | 2023.01.23 |
[Java] 백준 풀기 11721 - 열 개씩 끊어 출력하기 (0) | 2023.01.21 |
[Java] 백준 풀기 25304 - 영수증 (0) | 2023.01.20 |
[Python] 백준 풀기 2635 - 수 이어가기 (0) | 2023.01.19 |