import java.util.Scanner;
public class Main {
public static void main(String[] arge) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int num = Hansu(N);
System.out.println(num);
}
public static int Hansu(int N) {
int cnt = 0; // 한수 개수를 세기 위한 변수
for(int i = 1 ; i <= N; i++) {
if(i < 100) { // 100 미만은 모두 한수이다.
cnt++;
}else if(i >= 100 & i <= 1000) {
String str = Integer.toString(i); // 자릿수를 뽑아내기위해 String으로 변환
int[] tmp = new int[str.length()]; // 뽑은 수를 넣기 위한 배열 선언
for(int j = 0 ; j < str.length(); j++) {
char ch = str.charAt(j); // 백의 자리부터 뽑아서
int num = ch - '0'; // int로 바꿔주고
tmp[j] = num; // 배열에 넣는다.
}
if((tmp[0] - tmp[1]) == (tmp[1] - tmp[2]) ) { // 배열에 있는 수를 비교해서 같다면
cnt++; // 개수 ↑
}
}
}
return cnt; // 총 개수를 반환해준다.
}
}
○ 문제 요약
한수가 몇 개인지 구해라.
○ 문제 풀이
풀이에 앞서 한수가 무엇인지 설명이 필요할 듯하다. 123을 예로 설명하면 백의 자리는 1이고 십의 자리는 2 일의 자리는 3이다. 각 자리의 수가 등차수열을 이룬다고 하였으므로 백의 자리에서 십의 자리를 뺀 값과 십의 자리와 일의 자리를 뺀 값이 같다면 등차수열을 이뤄 한수의 조건을 충족한다. 여기서 한 가지 의문점이 생긴다.
바로 자릿수가 한자리인 수와 두 자리인 수는 비교할만한 대상이 없다는 것이다.
그렇다면 한수라고 볼 수 없느냐? 그건 아니다.
이 경우에는 한수라고 보기 때문에 우리는 세 자리 수만 해결하면 된다. 자세한 설명은 소스 코드에 작성했다.
○ 결과
'문제풀이 > 백준' 카테고리의 다른 글
백준 2941. 크로아티아 알파벳 (JAVA) (0) | 2022.03.24 |
---|---|
백준 10989. 수 정렬하기 3(JAVA) (0) | 2022.03.23 |
백준 4673. 셀프 넘버(JAVA) (0) | 2022.03.21 |
백준 4344. 평균은 넘겠지(JAVA) (0) | 2022.03.19 |
백준 1260. DFS와 BFS(JAVA) (0) | 2022.03.18 |