1065번: 한수
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나
www.acmicpc.net
[문제]
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
package lv6;
import java.util.Scanner;
public class No1065 {
public static int Hansu(int n) {
int cnt=0, result=0; //cnt=100이상 한수 개수, result=최종 한수 개수
if(n<100) { //두자리수는 수열을 이루지 못해 모두 한수
result = n;
}else {
for(int i=100;i<=n;i++) {
int hun = i/100;
int ten = (i/10)%10;
int one = i%10; //각 자리수의 숫자 추출
if((ten-one)==(hun-ten)) { //등차수열인지 판별
cnt++; //맞다면 cnt 증가
}
}
result = cnt+99; //100이상 한수 개수 + 1~99는 모두 한수
}
return result;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int han = Hansu(n);
System.out.println(han);
}
}
한수를 구하는 함수 내부는 입력하는 수 n이 99 이하일 때, 100 이상일 때로 경우를 나누어 코딩했다.
99이하인 경우, 두자리 수이므로 숫자들이 등차수열을 이루는지 판별할 수 없어서 무조건 한수이다.
100 이상인 경우, 나머지 연산을 통해 세 개의 변수에 각 자리수를 저장했다.
이후 조건문에서 (백의자리-십의자리) 값과 (십의자리-일의자리)값이 같은 경우 cnt 값을 증가시켜 한수의 개수를 계산한다. 이때 cnt값은 100이상의 숫자에 대한 한수 개수이다. 따라서 총 한수 개수인 result에 1~99 범위의 한수 개수 99를 더해주어야 최종 한수 개수를 구할 수 있다.
위의 한수 구하는 함수는 별도의 함수를 만들지 않고 main내부에서의 코딩으로도 가능하지만, 알고리즘 문제가 함수 단원에서 출제되어 함수로 작성했다.