[BaekJoon/Java] 백준 1065번 한수

김시현 Si Hyeon, Kim·2021년 12월 26일
0

Algorithm

목록 보기
1/9
post-custom-banner

문제 요약 설명

각 자릿수가 등차수열을 이루는 숫자를 한수라고 부른다고 한다.
예를 들어 123이 있을 수 있다. 백의 자릿수 1과 십의 자릿수 2의 차이는 1, 십의 자릿수 2와 일의 자릿수 3의 차이는 1로 길이가 3이고 차가 1인 등차수열이라고 할 수 있다.

아이디어

문제에서 주어진 조건으로 입력은 1~1000까지 가능하고, 2초의 시간이 주어진다.
처음으로 생각할 수 있었던 것은 일단 1000은 등차수열이 아니기 때문에 결국 1에서 999까지 숫자들만 가지고 생각하면 된다는 것이다.
두번째는 1 ~ 99까지는 모두 등차수열이라고 볼 수 있다. 그래서 두자리수 입력이 들어온다면 그 숫자를 그대로 반환하면 답이 된다.
예를 들어 30을 입력하면 답은 "30" 이다.

풀이

  1. 입력받은 수의 자릿수를 검사하여 if문으로 2자릿수면 그대로 result에 대입하고 2자릿수 이상이라면 else문에서 따로 컨트롤한다.
  2. else문에서는 먼저 result에 99를 더하준다. for 반복문을 이용하여 100부터 입력받은 수 N까지 탐색을 시작한다. 이때 100부터 하는 이유는 1번에서 설명했듯이 99까지는 두자릿수이므로 전부다 등차수열이 된다.
  3. for문 내부에서 숫자의 각 자릿수를 구한다. hun(백의자리), ten(십의자리), one(일의자리)로 저장하고 hun - ten 값과 ten - one 값이 같으면 등차수열이므로 result에 +1을 해준다.
  4. 1000이 입력될 경우 hun = 10, ten = 0, one = 0으로 10 - 0 != 0 - 0 이어서 등차수열 결과에 더해지지 않는다.

코드

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

public class Alogrithm {
    public static void main(String[] args) throws IOException  {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();

        int N = Integer.parseInt(input);
        int len = input.length();
        int result = 0;

        // 2자리 수 까지는 전부 등차수열이 가능 그래서 1~99까지는 전부 한수
        if (len <= 2) {
            result = N;
        } else {
            result += 99;
            int i;
            for (i = 100; i <= N; i++) {
                int hun = i / 100;
                int ten = (i % 100) / 10;
                int one = i % 10;

                if (hun - ten == ten - one) {
                    result += 1;
                }
            }
        }
        System.out.print(result);
        br.close();
    }
}
profile
최악의 환경에서 최선을 다하자!!
post-custom-banner

0개의 댓글