본문 바로가기
Algorithm

백준 알고리즘 1065번 한수 구하기 - 자바(JAVA)

by LasBe 2021. 12. 24.
반응형

문제

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

입력

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

출력

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

 


결과


코드

import java.util.Scanner;
public class Main {
	public static void hanSu(int n){
		int count = 0;
		if(n<100) System.out.println(n);
		else {
			for(int i=100;i<=n;i++) {
				int i1 = i/100; int i2 = i%100/10; int i3 = i%10;
				if((i1 - i2)==(i2 - i3))
					count++;
			}
			System.out.println(99+count);
		}
	}
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		hanSu(n);
	}
}

 

 


문제풀이

우선 한수란 숫자 각 자리가 등차수열을 이루는 수이다.

 

예를 들어 123이란 수가 있으면 각 자리 수 별 1, 2, 3이 구분되고 1과 2의 차이는 1,  2와 3의 차이는 1

이렇게 등차수열을 이루면 한수이다.

 

그렇다면 1의 자리 수와 10의 자리 수는 어떻게 계산되는지 고민하다 예제 입출력을 보니 100 미만의 수는 전부 한수로 취급하는 것 같았다.

 

N이 입력되면 1부터 N까지 한수의 개수를 구해야 하기 때문에 조건문을 통해 100미만의 N이 입력된다면 그대로 N을 출력해주고

문제의 조건에 1000이하의 수가 입력된다고 했으니 100이상의 수가 입력될 경우 100부터 N까지 반복문을 통해 한수의 개수를 세어줬다.

 

조건문 속 한수를 구하는 방법은

100의 자리 = i/100

10의 자리 = i%100/10

1의 자리 = i%10

자릿수 별 수를 구분해준 뒤 100의 자릿수에 10의 자릿수를 구한 결과와 10의 자릿수에 1의 자릿수를 구한 결과를 비교해

같으면 하나씩 카운트 해주었다.

 

마지막으로 카운트 한 수에 카운트 하지 않은 100미만의 한수 99를 더해 결과를 출력해주었다.

반응형

댓글


오픈 채팅