본문 바로가기

1.프로그래밍/알고리즘

[알고리즘] 백준 1065 한수 Java

728x90
반응형

https://www.acmicpc.net/problem/1065

문제

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

입력

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

출력

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

예제 입력 1

110

예제 출력 1

99

예제 입력 2

210

예제 출력 2

105

Code

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

public class Main {

    public static boolean equalDefference(int num){
        int temp = num;
        ArrayList<Integer> tempArray = new ArrayList<>();

        if(num < 100){
            return true;
        } else if(num == 1000){
            return false;
        }
            else{
            while(num != 0){
                tempArray.add(num%10);
                num = num / 10;
            }
            for(int i = 0; i < tempArray.size() -2; i++){
                if(tempArray.get(i) - tempArray.get(i+1) == tempArray.get(i+1) - tempArray.get(i+2)){
                    return true;
                }
            }
        }
        return false;
    }

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int num = Integer.parseInt(br.readLine());
        int count = 0;

        for(int i = 1; i<= num; i++){
            if(equalDefference(i) == true){
                count ++;
            }
        }

        equalDefference(1000);

        System.out.println(count);

    }
}

Point

등차수열을 구하는 메서드를 작성하여 풀었다.
각 자릿수를 배열에 추가하여 반복문을 통해 각 자릿수의 공차가 같다면 등차수열로 판단하여 true를 리턴하였다.

그런데 num == 1000일 경우 반복문이 돌면서 각 자릿수가 0일 경우 true를 반환하여 따로 else if로 빼주었다.
문제에서 요구 조건은 1000보다 작거나 같은 수 이기 때문에 위와 같이 한가지만 처리하면 되었고, 만약 조건이 더 커진다면 로직을 더 바꿔봐야 될 것 같다.

728x90
반응형