문제풀이

[JAVA] 백준 1065번 한수 : 등차수열

IT록흐 2021. 7. 10. 17:01
반응형
 

1065번: 한수

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

www.acmicpc.net

 

1. 문제 추상화

 

입력받은 수보다 같거나 작은 수 중, 각 자리 수가 등차수열을 이루는 수(한수)의 개수를 구하시오.

 

2. 알고리즘 

 

나의 풀이

 

반복문을 돌려 1의 자리부터 하나씩 체크한다.

1. current = num % 10, next = (num/10)%10 이면 d = next - current이고 nextnext = next  + d 이다.

2. 다음 자리수로 이동하면 next가 current가 된다.

3. 이전 자리수에서의 nextnext와 현재 자리수의 next가 일치해야 등차수열이다. 

 

import java.util.Scanner;

public class Main1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		
		int result = countHanNumber(num);
		System.out.println(result);
	}
	
	public static int countHanNumber(int num) {
		
		int count = 0;
		
		for(int i=1; i<=num;i++) {
			if(isHanNumber(i)) {
				count++;
			}
		}
		return count;
	}
	
	public static boolean isHanNumber(int num) {
		boolean isFirst = true;
		int current = 0;
		int next = 0;
		int nextnext = 0;
		int difference = 0;
		
		while( num > 0 ) {
			current = num%10;
			next = (num/10)%10;
			num /= 10;
			
			if(num != 0) {
				difference = next - current;
			}else {
				return true;
			}
			
			if(isFirst) {
				nextnext = next + difference;
			}else {
				if(nextnext != current + difference) {
					return false;
				}else {
					nextnext = next + difference;
				}
			}
			isFirst = false;
		}
		return true;
	}

}

 

 

 

일반적인 풀이

 

[백준] 1065번 : 한수 - JAVA [자바]

https://www.acmicpc.net/problem/1065 1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌

st-lab.tistory.com

 

 

 

반응형