Notice
Recent Posts
Recent Comments
Link
반응형
관리 메뉴

쿵야지식떨이

[백준] 1065번 : 한수 - Java 본문

알고리즘

[백준] 1065번 : 한수 - Java

김쿵야 2024. 1. 26. 00:34
반응형

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

 

1065번: 한수

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

www.acmicpc.net


문제

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

 

입력

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

 

출력

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

 

 

❓등차수열이란?

  • 연속된 두 개의 수의 차이가 일정한 수열
864라는 예시 수로 보면
8-6 과 6-4 가 2로 같기 때문에  864는 등차수열이다.
123, 456, 789와 같은 수들 모두 등차수열! 

 

 

풀이

  1. 1부터 99까지의 모든 숫자는 각 자리 수가 등차수열을 이루고 있기 때문에 모두 한수, count에 바로 추가해준다.
  2. 100부터 999까지의 숫자는 세 자리수이기 때문에 각 자리의 차이가 동일한 지 확인이 필요
  3. 숫자를 문자열로 변환한 후 각 자리를 split 하고 각 자리의 차이가 동일한 지 확인 한다.
  4. 각 자리의 차이를 확인할 때 각 자릿수의 순서대로 차이 값을 계산한다. 
  5. 동일하다면 count에 추가해준다. 
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();
        int count = 0;

        for (int i = 1; i <= N; i++) {
            if (i <= 99) {
                count += 1;
            }else if (i <= 999) {
                String[] num = Integer.toString(i).split("");
                if ((Integer.parseInt(num[1])-Integer.parseInt(num[0])) == (Integer.parseInt(num[2]) - Integer.parseInt(num[1]))) {
                    count += 1;  
                }
            }
        }

        System.out.println(count);

    }
}

 

반응형