본문 바로가기

Study/algorithms

[백준] 11729 하노이 탑 이동 순서

반응형

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

golang의 fmt 패키지는 기본적으로 buffer를 사용하지 않기 때문에 그냥 출력이나 입력을 하면 느리다고한다. 그냥 출력으로 했더니 시간초과 났다. 아래와 같이 buffer를 사용하게 바꾸니까 맞았다.

 

하노이 탑 개수는 대충 계산해보니까 등비수열 비슷한것 이었다.

내부 함수는 어떻게 진행되는지 찾아서 풀었다.

package main

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

var out = bufio.NewWriter(os.Stdout)

func hanoi(s, d int, n float64) {
	if n == 1 {
		fmt.Fprintf(out, "%d %d\n", s, d)
		return
	}
	m := 6 - s - d
	hanoi(s, m, n-1)
	hanoi(s, d, 1)
	hanoi(m, d, n-1)
}

func main() {
	in := bufio.NewReader(os.Stdin)
	var n float64
	fmt.Fscanf(in, "%f\n", &n)
	fmt.Fprintf(out, "%.0f\n", math.Pow(2.0, n)-1)
	hanoi(1, 3, n)
	out.Flush()
}

 

'Study > algorithms' 카테고리의 다른 글

[백준] 2231 분해합  (0) 2020.01.21
[백준] 2798 블랙잭  (0) 2020.01.21
[백준] 2447 별 찍기 - 10  (0) 2020.01.19
[백준] 10870 피보나치수 5  (0) 2020.01.19
[백준] 10872 팩토리얼  (0) 2020.01.19