[JAVA] 백준 11729번 (하노이의 탑)

import java.util.Scanner;

public class B11729 {
    public static StringBuilder sb = new StringBuilder();
    //StringBuilder?
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int num = in.nextInt();

        //원판 이동 회수 구하기기
       sb.append((int) (Math.pow(2,num) - 1)).append('\n');

        Hanoi(num, 1, 2, 3);
        System.out.println(sb);
    }
    public static void Hanoi(int num, int start, int mid, int to) {
        //원판의 개수가 1개라면, 시작점과 도착점만 구함
        if (num ==1) {
            sb.append(start + " " + to + "\n");
            return;
        }
        //num-1개의 원판을 중간지점으로 옮김
        Hanoi(num -1, start, to, mid);

        //시작점의 원판 1개를 도착점으로 옮김
        sb.append(start + " " + to + "\n");

        //n-1개의 중간점에서 도착점으로 옮김
        Hanoi(num -1, mid, start, to);
    }
}

Math.pow(대상숫자,지수): 모두 double형

append() 메소드 인수로 전달된 값을 문자열로 변환한 후, 해당 문자열의 마지막에 추가 -> 이어 붙이는 것

StringBuilder String과 문자열을 더할 때 새로운 객체를 생성하는 것이 아니라 기존의 데이터에 더하는 방식을 사용하기 때문에 속도도 빠르며 상대적으로 부하가 적음