https://www.acmicpc.net/problem/1065
import java.util.Scanner;
public class Main {
public static boolean isHansu(int num) {
if(num>=1 && num<=99) // 1~99까지는 무조건 한수
return true;
String number = Integer.toString(num); // 각 자리수의 차를 구하기 위해 문자열로 변환
int minus = (number.charAt(0)-'0') - (number.charAt(1)-'0'); // 0번째 수와 1번째 수의 차
for(int i=0; i<number.length()-1; i++) { // 각 자리수차 비교 시작
int cha = (number.charAt(i) - '0') - (number.charAt(i+1)-'0'); // i번째와 i+1의 차를 구함
if(minus != cha) // 그 차가 위에서 구한 minus 변수와 다르다면 등차수열이 아니므로
return false; // 한수가 아님 false 리턴
}
return true; // 모든 자리수의 차가 minus 변수와 같다면 등차수열이므로 한수임 true 리턴
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int count = 0;
for(int i=1; i<=N; i++) { // 1부터 N까지 한수가 몇 개인지 알아보기
if(isHansu(i)==true)
count++;
}
System.out.println(count);
}
}
풀이 :
한수란?
어떤 양의 정수 X의 각 자리수가 등차수열을 이룬다면 한수라고 한다.
한자리 수
수가 하나뿐이니 등차수열이므로 한수
1, 2 ~ 9
두자리 수
ex) 10 이라면 공차가 -1인 등차수열
11이라면 공차가 0인 등차수열
99라면 공차가 0인 등차수열
--> 따라서 1~99까지는 무조건 한수이다.
세자리수
ex) 123이라면 공차가 각각 1, 1이므로 한수
998이라면 공차가 각각 0, -1이므로 한수가 아님
위의 코드에서는 각 자리수를 구하기 쉽게 int형을 String형으로 변환하여 사용하였다.
먼저 minus변수를 사용해 0번 수에서 1번 수를 뺀 값(공차)를 구한다.
이제 for문을 사용해서 각 자리수의 차를 minus변수와 비교해서 다르다면 공차가 같지않으니 등차수열이 아니므로 false를 리턴해주고 다 같다면 공차가 같은거니 등차수열이므로 true를 리턴해준다.
'코딩테스트 > 백준' 카테고리의 다른 글
[백준-자바] 1929번 소수 구하기 (에라토스테네스의 체) / 2022.02.07 (0) | 2022.02.07 |
---|---|
[백준-자바] 1110번 더하기 사이클 / 2022.02.05 (0) | 2022.02.05 |
[백준-자바] 4673번 셀프 넘버 / 2022.01.31 (0) | 2022.01.31 |
[백준-자바] 1978번 소수 찾기 / 2022.01.30 (0) | 2022.01.30 |
[백준-자바] 2581번 소수 / 2022.01.29 (0) | 2022.01.29 |