https://www.acmicpc.net/problem/1065
문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
풀이
문제에서 정의한 "한수"를 구하는 문제이다.
"한수"의 성질에 의하면, 1부터 99까지는 모두 한수이다.(각 자리가 등차수열을 이룬다고 되어 있는데, 최소한 백의 자리 이상이어야 등차수열인지 아닌지 판별 가능하기 때문)
따라서 두 자릿수 N이 입력될 경우 N을 출력하면 되고, 세 자릿수가 입력되면 직접 "한수"의 개수를 찾아야 한다.
"한수"의 개수를 찾는 han() 함수를 작성하였다.
1000 이하의 수를 입력한다고 되어있기 때문에 세 자릿수만 검사할 수 있는 함수를 작성하였고, 1000이 입력되었을 경우를 생각하여 조건을 추가하였다.
🔔 자세한 코드 설명은 더보기 란에 작성하였습니다.
1. N을 입력받고, 두 자릿수라면 N을 출력하고 함수를 return 한다.
int N = Integer.parseInt(br.readLine());
if(N < 100) {
System.out.println(N);
return;
}
2. 세 자릿수일 경우, han(N)의 결과를 출력한다. (han : "한수"의 개수를 구하는 함수)
System.out.println(han(N));
3. han() 함수의 내용
3-1. "한수"의 개수를 입력할 변수 선언(100 이하의 "한수"의 개수는 99개)
int count = 99;
3-2. 100부터 N까지 "한수"를 찾는다.(one : 일의 자리 수, ten : 십의 자리 수, hun : 백의 자리 수)
* i가 1000일 경우, "one - ten == ten - hun"이 참이지만, "한수"가 아니기 때문에 "i < 1000" 조건을 추가하였다.
for(int i = 100; i <= N; i++) {
int one = i % 10;
int ten = i / 10 % 10;
int hun = i / 100 % 10;
if(one - ten == ten - hun && i < 1000) {
count++;
}
}
3-3. count를 return한다.
return count;
코드
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
if(N < 100) {
System.out.println(N);
return;
}
System.out.println(han(N));
}
public static int han(int N) {
int count = 99;
for(int i = 100; i <= N; i++) {
int one = i % 10;
int ten = i / 10 % 10;
int hun = i / 100 % 10;
if(one - ten == ten - hun && i < 1000) {
count++;
}
}
return count;
}
}
틀린 부분이 있다면 정정해주시면 감사하겠습니다.
궁금한 부분이 있거나, 다른 아이디어가 있으시면 자유롭게 댓글 남겨주세요!
'[JAVA]백준 알고리즘 > 기타' 카테고리의 다른 글
[JAVA]백준 알고리즘 4673번 : 셀프 넘버 (2) | 2023.01.10 |
---|---|
[JAVA]백준 알고리즘 15596번 : 정수 N개의 합 (2) | 2023.01.08 |
[JAVA]백준 알고리즘 4344번 : 평균은 넘겠지 (2) | 2023.01.07 |
[JAVA]백준 알고리즘 8958번 : OX퀴즈 (0) | 2023.01.07 |
[JAVA]백준 알고리즘 1110번 : 더하기 사이클 (0) | 2023.01.05 |