728x90
반응형
1. 문제
1065번: 한수
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나
www.acmicpc.net
문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
예제 입력 1 복사
110
예제 출력 1 복사
99
예제 입력 2 복사
1
예제 출력 2 복사
1
예제 입력 3 복사
210
예제 출력 3 복사
105
예제 입력 4 복사
1000
예제 출력 4 복사
144
예제 입력 5 복사
500
예제 출력 5 복사
119
2. 문제풀이
- 각 자릿수의 차이가 일정하면 한수
- 1부터 n까지 한수인 수가 몇 개인지 출력하는 것
- 한자리와 두 자릿수는 모두 한수임! ex) 1, 2, 3, 11, 35, 75.....
- 그래서 우선 count는 99로 지정하고, n이 100보다 작으면 한수가 n개만큼 있다는 것이고,
n이 100보다 크면 99+ (100부터 n까지의 한수)를 하면 된다.
- n이 100보다 크면 100부터 n까지 반복하면서 check 메서드를 통해 해당 수가 한수인지 확인한다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int count = 99;
if(n < 100) {
count = n;
}else {
for(int i = 100; i <= n; i++){
if(check(i)) {
count += 1;
};
}
}
System.out.println(count);
}
public static boolean check(int n) {
boolean check = false;
int a = (n%10)-((n/10)%10); // 각 자릿수의 차
while(n >= 10) { // 두자리수 전까지! 두자리 수가 되면 stop함
if((n%10)-((n/10)%10) == a) { // 다음자리 수의 차가 a와 같다면 true
check = true;
n /= 10;
}else {
check = false; // 자리수의 차가 a와 다르다면 한수가 아닌 것이니 flase로 바꾸고 break;
break;
}
}
return check;
}
}
728x90
반응형
'JAVA > 백준 알고리즘' 카테고리의 다른 글
[백준] 11720번 숫자의 합 - Java (0) | 2022.06.02 |
---|---|
[백준] 11654번 아스키 코드 - Java (0) | 2022.06.02 |
[백준] 4673번 셀프 넘버 - Java (0) | 2022.04.15 |
[백준] 15596번 정수 N개의 합 - Java (0) | 2022.04.14 |
[백준] 4344번 평균은 넘겠지 - Java (0) | 2022.04.14 |