[백준] #1065 한수

짱수·2022년 10월 3일
0

알고리즘 문제풀이

목록 보기
2/26
post-custom-banner

🔒문제 설명

한수란 양의 정수의 각 자리가 등차수열을 이루는 수를 뜻합니다.
정수 N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하세요.

ex>
321은 3, 2, 1이 등차수열을 이루므로 한수입니다.
134는 1, 3, 4가 등차수열을 이루지 않으므로 한수가 아닙니다.

🔑해결 아이디어

이 문제에서 가장 중요한 사실은 한자리, 두자리의 모든 수가 한수라는 것 입니다.
즉, 우리가 확인해야 하는 한수는 사실 세자리 수밖에 없습니다.

즉, 주어진 수 N이 한자리, 두자리 수라면 우리가 구해야 하는 값은 N과 동일합니다.

주어진 수가 세자리수일 경우, 3중 for문을 이용하여 모든 경우의 수를 탐색하겠습니다.
주어진 수가 1000일 경우 역시 3중 for문을 이용합니다.
1000은 한수가 아니며, 바로 이전의 수는 999로 세자리 수 이기 때문입니다.

💻소스코드

import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);
        int number = sc.nextInt();

        System.out.println(Solver(number));

    }
    static int Solver(int number){
        if(number < 100)
            return number;
        //한자리, 두자리 수는 무조건 한수이다.
        else{
            int answer = 99;
            int cont = 1;

            for(int first = 1; first < 10 && cont == 1; first++){
                for(int second = 0; second < 10 && cont == 1; second++){
                    for(int last = 0; last < 10 && cont == 1; last++){
                        if(100*first + 10*second + last > number) {
                            cont = 0;
                            break;
                        }
                        if(first - second == second - last)
                            answer++;
                    }
                }
            }

            return answer;
        }
    }
}
profile
Zangsu
post-custom-banner

0개의 댓글