[백준/Java] 1914 - 하노이 탑

2025. 9. 8. 15:47·코딩테스트/백준

https://www.acmicpc.net/problem/1914

문제


풀이

재귀를 사용하여 해결하였다

hanoi(옮길 원판 개수, 첫번째 장대, 두번째 장대, 세번째 장대) {
    if 옮길 원반이 0개면 {
        return;
    }

    첫번째 장대에서 가장 아랫칸을 제외한 나머지 원반들을 두번째 장대로 옮김
    가장 아랫칸 원판을 세번째 장대로 옮김
    나머지 원반들을 두번째 장대에서 세번째 장대로 옮김
}

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;

public class Ureca {
    static StringBuilder sb;

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
//        StringBuilder sb = new StringBuilder();
        sb = new StringBuilder();
        int N = Integer.parseInt(br.readLine());
        // N이 20보다 클 경우에는 공식을 사용하여 계산
        // 2^N - 1
        // N = 100 이면 2^100을 계산해야 하기 때문에 BigInteger를 사용
        BigInteger num = new BigInteger("2");
        sb.append(num.pow(N).subtract(new BigInteger("1")));

        // N이 20 이하일 때만 과정 출력
        if (N <= 20) {
            sb.append("\n");
            hanoi(N, 1, 2, 3);
        }

        System.out.println(sb);

        br.close();
    }

    static void hanoi(int N, int from, int tmp, int to) {
        // 옮길 원반이 0개면 return
        if (N == 0) {
            return;
        }

        // 첫번째 장대에서 가장 아랫칸을 제외한 나머지 원반들을 두번째 장대로 옮김
        hanoi(N - 1, from, to, tmp);
        sb.append(from).append(" ").append(to).append("\n");
        // 나머지 원반들을 두번째 장대에서 세번째 장대로 옮김
        hanoi(N - 1, tmp, from, to);
    }
}

결과

'코딩테스트/백준' 카테고리의 다른 글
  • [백준/Java] 10974 - 모든 수열
  • [백준/Java] 15649 - N과 M (1)
  • [백준/Java] 21736 - 헌내기는 친구가 필요해
  • [백준/Java] 18111 - 마인크래프트
KDH.dev
KDH.dev
  • KDH.dev
    CodingHard
    KDH.dev
  • 전체
    오늘
    어제
    • 전체글 (82)
      • 코딩테스트 (74)
        • 프로그래머스 (13)
        • 백준 (61)
      • CS (4)
        • 네트워크 (4)
      • Spring (1)
      • Java (3)
        • 자료구조 (3)
        • 알고리즘 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    14940
    16935
    네트워크
    백준
    프로그래머스 Lv.0
    프로그래머스
    코딩테스트
    멀티캠퍼스it부트캠프
    21736
    18111
    30804
    부트캠프후기
    11660
    자바
    CS
    5525
    17626
    [LG유플러스] 유레카 백엔드 개발자
    자료구조
    13913
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
KDH.dev
[백준/Java] 1914 - 하노이 탑
상단으로

티스토리툴바