문제 링크
https://www.acmicpc.net/problem/1065
나의 코드 (java)
import java.util.Scanner;
public class Main {
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
// 입력값 받기
int num = sc.nextInt();
// 한수 검사
int result = han(num);
// 결과 출력
System.out.println(result);
}
public static int han(int num){
// 한수를 카운팅 할 변수
int cnt = 0;
// 0~99는 각 자리수가 등차수열을 이룬다.
// ex) 11, 12, 13, 22, 24, 60 ...
if (num < 100){
cnt = num;
} else {
// 100이상부터는 한수를 99개는 깔고 시작한다.
cnt = 99;
// 1000은 한수가 될 수 없기 때문에 999까지만 검증하면 된다.
if(num == 1000){
num = 999;
}
// 100부터는 각 자리수를 구해야함.
for (int i=100; i<=num; i++){
// 여기부터는 입력값이 3자리이다.
// 백의 자리 구하기
int num_100 = i/100;
// 십의 자리 구하기
int num_10 = (i/10) % 10;
// 일의 자리 구하기
int num_1 = i%10;
// 백의 자리와 십의 자리 차이, 십의 자리와 일의 자리 차이가 같으면 카운팅
if ((num_100 - num_10) == (num_10 - num_1)){
cnt++;
}
}
}
// 한수 개수 반환
return cnt;
}
}
한수는 각 자릿수가 등차수열일 때 이를 한수라고 합니다.
그렇다면 1~99는 모두 한수입니다.
ex) 11, 12, 13, 22, 24, 60...
이제 1~99의 수가 들어오면 모두 한수로 카운트합니다.
그럼 100 이상의 값이 들어온다면 백의 자리, 십의 자리, 일의 자리를 검증합니다.
(백의 자리 - 십의 자리), (십의 자리 - 일의 자리)가 같다면 한수입니다.
1000은 한수가 될 수 없기 때문에 1000이 입력값으로 들어온다면 999로 바꾸어서 처리합니다.
'코딩공부 > 백준 (java)' 카테고리의 다른 글
[백준 11720] 숫자의 합 (java) (0) | 2021.07.08 |
---|---|
[백준 11654] 아스키 코드 (java) (0) | 2021.07.08 |
[백준 4673] 셀프 넘버 (java) (0) | 2021.07.07 |
[백준 15596] 정수 N개의 합 (java) (0) | 2021.07.07 |
[백준 4344] 평균은 넘겠지 (java) (0) | 2021.07.05 |
댓글