본문 바로가기

Algorithm

[JAVA]백준 1065 - 한수

백준의 1065번 문제인 한수이다.

입력받은 값보다 작거나 같은 한수의 개수를 출력하는 것이 목표이다.

입력값 n을 넣고, 한수를 구하는 메서드를 만들어 출력하면 되겠다 라는 생각을 했다.

 

한수를 구할 때 1 ~ 99까지의 숫자는 모두 한수이다.

→ 어차피 1의자리 숫자와 10의 자리 숫자는 어차피 어떻게 해도 차이가 같이 때문이다.

 

100의 자리 숫자부터 각 자리 숫자마다 등차를 구해야 하는데, 1의자리와 10의자리의 차 / 10의자리와 100의자리의 차 를 구해보았다.

한수를 구할 수 있는 메서드에는

한수를 담을 수 있는 ArrayList와 각 자리 숫자를 담을 수 있는 int형 배열을 생성했다.

어차피 1000 이전까지만 숫자를 구하는 것이기 때문에 100의자리 숫자까지만 담을 수 있도록 int[3]의 배열을 생성했다.

 

for문을 이용해 1 ~ 입력받은 n까지 숫자만큼 1씩 늘려가며 한수들만 골라 만들어둔 han에 담아주었다.

 

한수를 찾을 때는 1 ~ 99까지는 그냥 담아주고, 

100의 자리 숫자부터는 1의자리 숫자, 10의자리 숫자, 100의자리 숫자를 각각 배열에 담아 비교해주었다.

한수를 담은 ArrayList를 반환하고, main메서드에서 한수를 담은 ArrayList를 가져와 크기를 출력시켜 주었다.

 

결과는 성공이다.

 

전체 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class problem1065 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());

        List<Integer> han = hansu(n);

        System.out.println(han.size());
    }

    static List<Integer> hansu(int n) {
        List<Integer> han = new ArrayList<>();
        int[] arr = new int[3];

        for(int i = 1; i <= n; i++) {
            if(i < 100) {
                han.add(i);
            } else if(i == 1000) {
                break;
            }
            else {
                int han_num = i;
                int k = 0;
                while (han_num > 0) {
                    arr[k] = han_num % 10;
                    han_num /= 10;
                    k++;
                }
                if(arr[0] - arr[1] == arr[1] - arr[2]) {
                    han.add(han_num);
                }
            }
        }
        return han;
    }
}