HoonK212 GitHub_Blog

[오늘의 백준] 13번째

“1065번”

단계별로 풀어보기

  • 함수
    • 한수

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

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

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


풀이

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

public class Main {
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		System.out.print(arithmetic_sequence(Integer.parseInt(br.readLine())));
	}
 
	// arithmetic sequence(등차수열) 연산 함수
	public static int arithmetic_sequence(int num) {

		// 한수의 개수를 카운트하는 변수 생성
		int cnt = 0;
 
		// num이 10의 자리 숫자인 경우, num을 return
		if (num < 100) {
			
			return num;
			
		} else {
			
			cnt = 99;
			
			if (num == 1000) {
				// num이 1000인 경우, 예외 처리
				num = 999;
			}
 
			for (int i = 100; i <= num; i++) {
				
				int hun = i / 100; // 100의 자리 수
				int ten = (i / 10) % 10; // 10의 자리 수
				int one = i % 10; // 1의 자리 수
 
				// 각 자리 숫자가 등차수열을 이룬 경우
				if ((hun - ten) == (ten - one)) {
					cnt++;
				}
			}
		}
 
		return cnt;
	}
}