반응형
출처: https://www.acmicpc.net/problem/1065
Input
110
Output
99
어떤 양의 정수 X의 자리수가 등차수열을 이루면 『한수』 라고 합니다.
※ 등차수열: 연속된 두 개의 수의 차이가 일정한 수열.
ex) [123]: 1 → 2 → 3 ▶ +1
ex) [531]: 5 → 3 → 1 ▶ -2
ex) [222]: 2 → 2 → 2 ▶ +0
주어진 수를 한자리씩 비교하여 등차수열을 이루고 있는지 확인.
import java.util.Scanner;
public class Main {
public static int checkNumberLength(int num) {
int len = 0;
while (true) {
int temp = num / 10;
len++; // 자릿수 증가!
if (temp == 0) {
break;
}
// 확인할 자릿수를 한개씩 줄여나간다.
num = num / 10;
}
return len;
}
public static boolean solutionFunc(int num) {
boolean result = true;
// 우선 입력 받은 숫자의 자릿수를 파악한다!
int digit = checkNumberLength(num);
// 파악한 자릿수를 이용하여 해당 숫자가 등차수열로 구성되어 있는지 판단.
if (digit == 1 || digit == 2) { // 1의 자릿수 혹은 2의 자릿이면 무조건 true
return result;
}
// 문제 규정상 최대로 입력받는 수는 1000이므로 digit의 maximum value는 4이다!
// 3 <= digit <= 4일때만 동작하게 된다!
int[] arr = new int[digit];
for (int i = digit - 1; i > 0; i--) {
arr[i] = (int) (num / Math.pow(10, i));
num = num - (arr[i] * (int) Math.pow(10, i));
}
arr[0] = num % 10;
int cri = arr[1] - arr[0]; // 처음 2의 자릿수 - 1의 자릿수를 기준으로 삼는다!
for (int i = 1; i < arr.length - 1; i++) {
int temp = arr[i + 1] - arr[i];
if (temp != cri) // 값이 다르다면 등차수열이 아닌 것이다!{
return false;
}
return result;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 범위를 정할 변수n 입력받는다.
int n = sc.nextInt();
// 문제에서 요구하는 것의 갯수를 담당할 변수를 적용한다.
int count = 0;
// 1~n 까지 등차수열로 구성된 숫자를 판단한다.
for (int i = 1; i <= n; i++) {
// 해당 숫자를 함수를 통해 판단한다!
if (solutionFunc(i)) {
count++;
}
}
// 결과 출력
System.out.println(count);
}
}
반응형
'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글
[BOJ] 백준 1012 유기농 배추 (0) | 2021.02.22 |
---|---|
[BOJ] 백준 1759 암호 만들기 (0) | 2021.02.22 |
[BOJ] 백준 17281 ⚾ (0) | 2021.02.22 |
[BOJ] 백준 1764 듣보잡 (0) | 2021.02.22 |
[BOJ] 백준 17070 파이프 옮기기 1 (0) | 2021.02.22 |
댓글