Algorithm/Baekjoon
[백준] 1065번 : 한수 - Java
unknownomad
2022. 3. 15. 22:35
https://www.acmicpc.net/problem/1065
1065번: 한수
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나
www.acmicpc.net
주의점
1. 정의
1.1. 한수
- 각 자릿수가 등차수열을 이루는 수
1.2. 등차수열
- 연속된 두 개의 수의 차이가 일정한 수열
1.3. 예시1 - 753
- 각 자릿수 : 7, 5, 3
- 각 자릿수의 차이 : -2 씩 일정하게 감소 ➡ -2 = 공차
1.4. 예시2 - 222
- 공차 = 0
2. 적용
2.1. 문제
- 1보다 크고, 입력 받은 값보다 작거나 같은 한수의 개수 출력
2.1. 범위 1 ~ 9
- 비교할 숫자가 없어 한수로 세는듯
2.2. 범위 10 ~ 99
- 공차는 있으나 비교 대상이 없기에 한수로 세는듯
(문제에 주어진 예제1을 보면 110 입력 시 99 나옴 ➡ 1 ~ 99는 한수로 세는듯)
풀이
1. Scanner
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print(arithmetic_sequence(in.nextInt()));
in.close();
}
public static int arithmetic_sequence(int num) {
int cnt = 0; //한수 개수
if (num < 100) { //1 ~ 99 : 한수 범위
return num;
} else {
cnt = 99;
//1000 : 등차수열 X, 1000보다 큰 수는 입력받지 X
//num == 1000일 경우, num = 999;로 변경해야 함(예외 처리)
if (num == 1000) { //예외 처리
num = 999;
}
for (int i = 100; i <= num; i++) {
int hun = i / 100; //백의 자릿수
int ten = (i / 10) % 10; //십의 자릿수
int one = i % 10;
if ((hun - ten) == (ten - one)) { //각 자릿수를 뺀 값이 수열을 이루면
cnt++;
}
}
}
return cnt;
}
}
2. BufferedReader
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print(arithmetic_sequence(Integer.parseInt(br.readLine())));
}
public static int arithmetic_sequence(int num) {
int cnt = 0; //한수 개수
if (num < 100) {
return num;
} else {
cnt = 99;
if (num == 1000) { //예외 처리 필수
num = 999;
}
for (int i = 100; i <= num; i++) {
int hun = i / 100; //백의 자릿수
int ten = (i / 10) % 10; //십의 자릿수
int one = i % 10;
if ((hun - ten) == (ten - one)) { //각 자릿수를 뺀 값이 수열을 이루면
cnt++;
}
}
}
return cnt;
}
}
성능
- BufferedReader > Scanner