-
[문제해결을 위한 창의적 알고리즘] 숫자 뒤집기 (고급, p18)알고리즘 2016. 8. 7. 22:18
이 문제는 재귀적 방법으로 접근하면 된다. 문제 접근법에 대해서는 책에 설명이 잘 나와 있으므로, 참고하면 이해할 수 있을 것이라고 기대한다. 자바 코드 및 코드 설명은 아래와 같다.
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
'알고리즘' 카테고리의 다른 글
[문제해결을 위한 창의적 알고리즘] Combination (고급, p29) (0) 2016.09.16 [문제해결을 위한 창의적 알고리즘] 별 그리기 (고급, p24) (0) 2016.09.15 [문제해결을 위한 창의적 알고리즘] 색상환 (고급, p131) (0) 2016.08.15 [문제해결을 위한 창의적 알고리즘] 허프만 인코딩 (고급, p125) (0) 2016.08.15 정보 올림피아드 대비 등 (0) 2016.08.07