Algorithm
[백준] 1065번 - 한수 (Java)
haehyun
2022. 2. 4. 17:33
문제
단계별 풀어보기 - 함수, https://www.acmicpc.net/problem/1065
*한수 : 각 자리가 등차수열을 이루는 양의 정수.
코드
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 = 0;
for(int i = 1; i <= N; i++){
if(isHansu(i)){
count++;
}
}
System.out.println(count);
}
// 한수 체크
static boolean isHansu(int n){
if(n < 100) { return true; }
int right = n % 10; // 오른쪽 수
n /= 10;
int left = n % 10; // 왼쪽 수
n /= 10;
int diff = right - left; // 두 수의 차이 (절대값 아님, +- 구분 주의)
while(n > 0){
right = left;
left = n % 10;
n /= 10;
if(diff != right - left)
return false;
}
return true;
}
}
- 반복문을 통해 1~N 까지 수에 대해 차례대로 한수여부를 체크한다.
- 한수 여부를 체크하는 코드를 isHansu(int n) 메서드로 분리
- 1자리, 2자리 양의 정수는 비교할 자리수가 하나뿐이라 무조건 한수이다. (ex: 1, 2, ..., 98, 99)
- 3자리 이상 양의 정수는 1의 자리수(right)와 10의 자리수(left) 값을 추출해서 차이(diff)를 구한다.
- 이후, 100의 자리수 부터 왼쪽으로 하나씩 값을 추출해 차이를 구한다.
- 차이가 처음 구했던 diff와 다를 경우 한수가 아니다.
- 두 자리수의 차이를 구할 때 Math.abs()로 절대값을 구하지 않도록 주의하자. 무심결에 diff = Math.abs(right - left); 와 같이 구하게 되면 101, 202, 303 등 수도 한수로 받아들이게 된다.