문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
코드
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
sc.close();
int count = 0;
//1 부터 99까지는 전부다 등차 수열이다
if (N < 100){
count = N;
}
else{
if (N == 1000){ //1000일 경우 아해의 first,second,third를 구하는데 문제가 생김
N = 999;
}
count = 99;
for(int i = 100; i <= N; i++){
int first,second,third;
first = i / 100;
second = (i % 100) / 10;
third = (i % 100) % 10;
if ((second - first) == (third - second)){
count++;
}
}
}
System.out.println(count);
}
}
풀이
어렵당..! 브론즈로 손풀기 하던 나에게 실버라니...! 그래도 재밌다!
구글링을 통해 코드를 참고한 후에 풀이를 진행하였다.
아 문제를 잘못 이해했어서 어렵게 느껴졌었다.
문제를 잘 읽어보니, 어떤 양의 정수 X의 각 자릿수! 가 등차수열을 이룬다면... 이라고 되어있다.
크게 어렵지 않은 문제다.각 자리수를 쪼개서 구해보자
여기서 제일 유의할점은 3가지 케이스로 나눠서 개수를 셀려고 했다는 점이다.
100보다 작을 경우는 전부다 한수 이므로, if문에서 처리를 해준다.
100보다 크고 1000보다 작을 경우 else문의 for문에서 처리를 해준다.
하지만 1000일 경우 해당 for문에서 처리를 할수 없다. 1000은 한수가 아니므로 N을 999로 바꾸고 for문으로 넘겨주면 예외처리를 해줄 수 있다.
끝!
'Programming > Algorithm' 카테고리의 다른 글
[백준] 11720번 : 숫자의 합 (Java) (0) | 2021.07.18 |
---|---|
[백준] 11654번 : 아스키 코드 (Java) (0) | 2021.07.16 |
[백준] 4673번 : 셀프 넘버 (Java) (0) | 2021.07.13 |
[백준] 15596번 : 정수 N개의 합 (Java) (0) | 2021.07.13 |
[백준] 4344번 : 평균은 넘겠지 (Java) (0) | 2021.07.12 |
댓글