[문제해결을 위한 창의적 알고리즘] 숫자 뒤집기 (고급, p18)
이 문제는 재귀적 방법으로 접근하면 된다. 문제 접근법에 대해서는 책에 설명이 잘 나와 있으므로, 참고하면 이해할 수 있을 것이라고 기대한다. 자바 코드 및 코드 설명은 아래와 같다.
import java.util.Scanner;
public class ReverseNum18 {
public static int n;
public static void f(int i) {
// 숫자가 0보다 크면
if (i > 0) {
// 제일 마지막 자리를 출력한다.
System.out.print(i%10);
// 그리고 제일 마지막 자리를 없애고 재귀 호출 한다.
f(i/10);
}
return;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
// Scanner 클래스로 input처리
Scanner sc = new Scanner(System.in);
// 하나의 숫자 n 읽기
n = sc.nextInt();
// 자바에서는 읽는 것이 끝났다면, 바로 자원 해제하여 메모리 관리
// 이 코드가 없으면 경고 표시 나타남
sc.close();
// 숫자 뒷부분이 0으로 끝나는 경우 미리 0을 제외
while (n % 10 == 0) {
n = n/10;
}
f(n);
return;
}
}
Big O(n) (n은 숫자 길이)
github 주소: https://github.com/nevermet/CreativeAlgorithmAdv/blob/master/ReverseNum18.java