Beautiful Days at the Movies
문제: Beautiful Days at the Movies
난이도: Easy
문제 설명
어떠한 두 정수 i, j와 나누는 수 k가 주어졌을 때, i부터 j까지 각각의 수를 뒤집고 그 뒤집은 수와의 차를 k로 나눠서 나누어 떨어지는 경우가 몇 가지인지를 구하라.
예를 들어 20, 23, 6이 주어졌을 경우, 20, 22는 뒤집은 수와의 차를 6으로 나누었을 때 나누어 떨어지지만 21, 23은 나누어 떨어지지 않는다.
문제 해결
소스 코드
static int beautifulDays(int i, int j, int k) {
String toStr = null;
String revStr = null;
StringBuffer temp = null;
int revInt = 0;
int cnt = 0;
char num = '0';
for(; i <= j; i++) {
toStr = Integer.toString(i);
temp = new StringBuffer(toStr);
temp.reverse();
revStr = temp.toString();
for(int b = 0; b < revStr.length(); b++) {
num = revStr.charAt(revStr.length() - b - 1);
revInt += Character.getNumericValue(num) * Math.pow(10, b);
}
if((i - revInt) % k == 0) {
cnt++;
}
revInt = 0;
}
return cnt;
}
해설
수를 뒤집는다는 개념은 인간이 머릿속으로 생각해내기엔 매우 쉬운 일이지만 이를 소스코드에 구현하려면 고려해야 할 부분이 여럿 있다.
수를 뒤집는 방법은 수를 문자열로 바꾸고 StringBuffer의 reverse메소드를 이용해 뒤집는 방법을 사용했다. 그 후 뒤집은 수를 일의 자리부터 10의 거듭제곱을 곱하고 더하는 방법을 사용해 뒤집은 수를 다시 정수로 변환하였다.
둘의 차가 k로 나누어 떨어지는 경우의 개수를 구하는 방법은 단순한 계산이므로 생략한다.