알고리즘

[문제해결을 위한 창의적 알고리즘] 숫자 뒤집기 (고급, p18)

nevermet 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


문제해결을 위한 창의적 알고리즘 목록