본문 바로가기
코딩테스트/백준

JAVA 백준 1065번 한수

by 광고(주) 2022. 5. 5.
반응형

문제

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
110
1
210
1000
500

출력

첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
99
1
105
144
119

알고리즘 분류

브루트포스 알고리즘(bruteforcing)

소스코드

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

public class Main {
    public static boolean hansu(int n, List<Integer> arr) {
        int su1 = n % 10;
        int su2 = n / 10;

        if (su2 != 0) {
            if (hansu(su2, arr) == false) {
                return false;
            }
        }
        arr.add(su1);

        if (arr.size() < 3)
            return true;

        if (arr.get(0) - arr.get(1) == arr.get(arr.size() - 2) - arr.get(arr.size() - 1))
            return true;
        return false;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int N = Integer.parseInt(bf.readLine());
        if (N > 1000)
            N = 0;

        int count = 0;
        for (int i = 1; i <= N; i++) {
            List<Integer> ans = new ArrayList<>();
            if (hansu(i, ans))
                count++;
        }

        bw.write(count + "\n");
        bw.flush();
        bw.close();
    }
}
반응형

댓글