💻 Algorithm/Bruteforcing(브루트포스)

[JAVA] 백준 1065 - 한수

dlalwl_jpg 2024. 1. 16. 17:23

 

실버 IV

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

 

1065번: 한수

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

www.acmicpc.net


📌 문제

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


📤 입력

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


📥 출력

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


💡 접근방식

숫자를 String으로 변환하여 문자로 하나씩 자르고 각 자리수를 arr에 저장한다.

예를 들어, 114는 arr에 [1, 1, 4] 와 같이 저장된다.

그리고 등차수열인지 판별할 때는 arr[0] - arr[1]과 arr[1] - arr[2]가 같은지 다른지로 판별하였다.

예를 들어 114에서 arr[0] - arr[1] = 1 - 1 = 0이고, arr[1] - arr[2] = 1 - 4 = 3이다.

등차수열은 값이 일정해야 하는데 다르므로 114는 한수가 아니다. 이와 같이 한수를 판별하는 코드를 작성하였다.


💻 코드

package 브루토포스;

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

public class SLIVER4_BJ1065 {
    /*https://www.acmicpc.net/problem/1065
        한수
     */
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        //변수 설정
        ArrayList<Integer> arr = new ArrayList<>();
        int count = 0;

        //N입력
        int N = Integer.parseInt(br.readLine());

        for(int i = 1; i <= N; i++){
            //문자열로 변환
            String num = String.valueOf(i);

            for(int j = 0; j < num.length(); j++){
                //문자열을 하나씩 문자로 자르기
                char charNum = num.charAt(j);
                //문자를 int로 변환
                int intNum = Character.getNumericValue(charNum);
                //arr배열에 각 자리 수를 추가
                arr.add(intNum);
            }

            //등차수열인지 판별하는 변수 설정
            boolean check = false;
            for(int j = 0; j < arr.size() - 2; j++){
                //등차수열인지 판별(등차수열이 아니면 check를 true로 변환)
                if(arr.get(j) - arr.get(j + 1) != arr.get(j + 1) - arr.get(j + 2)){
                    check = true;
                }
            }

            //arr초기화
            arr.clear();

            //한수가 아니면(check = true) 반복문 처음으로 이동, 한수면 count증가
            if(check){
                continue;
            }

            else {
                count++;
            }

        }

        //결과 출력
        System.out.println(count);
    }
}

📝 NOTE

 전에는 char를 int로 변환할 때 char - string - int 단계를 거쳐 변환했다.

즉, charAt() - String.valueOf() - Integer.parseInt()로 변환하였다.

이번에는 char를 int로 바로 변환하는 Character.getNumericValue()를 이용하였다.