[백준][1065번:한수]

호준·2022년 1월 20일
0

Algorithm

목록 보기
37/111
post-thumbnail

문제

링크텍스트

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

입력

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

출력

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

코드

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        System.out.println(count(N));

    }
    static int count(int num){
        if(num<100){
            return num;
        }
        int cnt = 99;
        for (int i = 100; i <= num; i++) {
            int hun = i / 100;
            int ten = (i % 100) / 10;
            int one = (i % 100) % 10;
            if ((hun - ten) == (ten - one)) {
                cnt++;
            }
        }
        return cnt;
    }
}

코드설명

2자리 수는 무조건 등차수열이다 이유는 2개의 수밖에 없기 때문이다.
예를들어 24의 수는 등차가 2일 등차수열이다.
둘자리 수는 비교대상이 2개밖에 없기 때문에 2자리 수는 등차수열이다. 그러므로 2자리 숫자가 들어왔을 경우에는 2자리 숫자를 그대로 return해주면 된다.
3자리 수부터 이제 비교를 해야가면서 나가야한다.
개수를 묻는 문제기 때문에 100개 전의 등차 수열 개수 99부터 cnt를 시작하여 100~N까지 반복문을 돌면서 맞으면 ++해준뒤 cnt를 return하면된다.

profile
도전하지 않는 사람은 실패도 성공도 없다

0개의 댓글