더북(TheBook)

문제 풀이 최적화

앞의 코드는 하노이의 탑 문제를 잘 풀어내지만 매 부분 문제마다 구해 놓은 과정을 전부 순회하며 이어 붙이기 때문에 효율적이지 않습니다. 하노이의 탑 문제처럼 과정을 전부 기록해야 하는 문제의 답을 메서드의 반환을 이용하여 구하려고 하면 이렇게 비효율적인 구현이 될 수 있습니다.

이 경우에는 메서드의 반환 대신 매개변수를 이용하여 과정을 기록할 수 있습니다. 이 문제는 과정을 List<int[]>로 다루었습니다. 이렇게 과정을 기록하는 변수를 메서드의 매개변수로 넘겨주면 다음과 같이 hanoi() 메서드를 다시 작성할 수 있습니다.

private void hanoi(int n, int from, int to, List<int[]> process) {
    if (n == 1) {
        process.add(new int[] {from, to});
        return;
    }
    
    int empty = 6 - from - to;
    
    hanoi(n–1, from, empty, process);
    hanoi(1, from, to, process);
    hanoi(n–1, empty, to, process);
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.