1065번: 한수
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나
www.acmicpc.net
문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if(n<100){
System.out.println(n);
}
else if(n<1000){
System.out.println(hansu(n)+99);
}
else if(n == 1000){
System.out.println(hansu(n)+98); //n이 1000일때는 등차수열이 안되니 미리 오류값을 빼준다
}
}
public static int hansu(int num){
int n1;
int n2;
int count =0;
for(int i =100; i<=num;i++){
int a=i;
n1 = (a%10) -(a/10%10); //일의자리-십의자리
a/=10;
n2 = (a%10) -(a/10%10); //십의자리-백의자리
if(n1 == n2)
count++;
}
return count;
}
}
한수의 뜻을 이해하는데 오래걸렸다.
1~99까지는 모두 등차수열이기 때문에 100이하인부분&100이상&1000일때 이렇게 구분해서 풀었다.
1~99까지 왜 모두 등차수열이냐? 한수란 각자리수가 등차수열을 이루는 부분을 말한다.
예) 87은 7-8=-1이 공차인 등차수열이고
96은 9-6=3이 공차인 등차수열이다.
그럼 100이상인 수는 어떻게 한수인지 알수 있을까..?
예를 들어 123은 한수다. 1-2 = -1 , 2-3 =-1 이므로 차이가 같기 때문에 등차수열을 이루기 때문이다.
'백준 알고리즘 > JAVA' 카테고리의 다른 글
백준/11720/숫자의 합/JAVA (0) | 2021.09.12 |
---|---|
백준/11654/아스키코드/JAVA (0) | 2021.09.10 |
백준/4673/셀프넘버/JAVA (0) | 2021.09.08 |
백준/4344/평균은 넘겠지/JAVA (0) | 2021.09.07 |
백준/8958/OX퀴즈/JAVA (0) | 2021.09.06 |
댓글