티스토리 뷰

문제
 

11729번: 하노이 탑 이동 순서

세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로

www.acmicpc.net

풀이
package main

import (
	"bufio"
	"fmt"
	"math"
	"os"
)

func main() {
	var n int
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	fmt.Fscanln(reader, &n)
	defer writer.Flush()

	fmt.Fprintln(writer, int(math.Pow(2, float64(n)))-1)
	hanoi(n, 1, 3, 2, writer)
}

func hanoi(n, from, to, via int, writer *bufio.Writer) {
	if n == 1 {
		fmt.Fprintf(writer, "%d %d\n", from, to)
		return
	}
	hanoi(n-1, from, via, to, writer)
	move(from, to, writer)
	hanoi(n-1, via, to, from, writer)
}

func move(from, to int, writer *bufio.Writer) {
	fmt.Fprintf(writer, "%d %d\n", from, to)
}
728x90
댓글