본문 바로가기

코딩테스트/백준

[백준-자바] 1065번 한수 / 2022.02.01

https://www.acmicpc.net/problem/1065

 

1065번: 한수

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

www.acmicpc.net

 

 

import java.util.Scanner;

public class Main {
	public static boolean isHansu(int num) {
		if(num>=1 && num<=99) // 1~99까지는 무조건 한수
			return true;
		String number = Integer.toString(num); // 각 자리수의 차를 구하기 위해 문자열로 변환
		int minus = (number.charAt(0)-'0') - (number.charAt(1)-'0'); // 0번째 수와 1번째 수의 차
		for(int i=0; i<number.length()-1; i++) { // 각 자리수차 비교 시작
			int cha = (number.charAt(i) - '0') - (number.charAt(i+1)-'0'); // i번째와 i+1의 차를 구함
			if(minus != cha) // 그 차가 위에서 구한 minus 변수와 다르다면 등차수열이 아니므로
				return false; // 한수가 아님 false 리턴
		}
		return true; // 모든 자리수의 차가 minus 변수와 같다면 등차수열이므로 한수임 true 리턴
	}
	
	public static void main(String[] args){
    	Scanner sc = new Scanner(System.in);
    	int N = sc.nextInt();
    	int count = 0;
    	
    	for(int i=1; i<=N; i++) { // 1부터 N까지 한수가 몇 개인지 알아보기
    		if(isHansu(i)==true)
    			count++;
    	}
    	
    	System.out.println(count);
    }
}

 

풀이 : 

한수란?
어떤 양의 정수 X의 각 자리수가 등차수열을 이룬다면 한수라고 한다.

한자리 수  
수가 하나뿐이니 등차수열이므로 한수 
1, 2 ~ 9

두자리 수
ex) 10 이라면 공차가 -1인 등차수열
       11이라면 공차가 0인 등차수열
       99라면 공차가 0인 등차수열

--> 따라서 1~99까지는 무조건 한수이다.

세자리수
ex) 123이라면 공차가 각각 1, 1이므로 한수
       998이라면 공차가 각각 0, -1이므로 한수가 아님

 

위의 코드에서는 각 자리수를 구하기 쉽게 int형을 String형으로 변환하여 사용하였다.

먼저 minus변수를 사용해 0번 수에서 1번 수를 뺀 값(공차)를 구한다. 

이제 for문을 사용해서 각 자리수의 차를 minus변수와 비교해서 다르다면 공차가 같지않으니 등차수열이 아니므로 false를 리턴해주고 다 같다면 공차가 같은거니 등차수열이므로 true를 리턴해준다.