์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ/BOJ_Java

[BOJ/Step10] 11729 : ํ•˜๋…ธ์ด ํƒ‘ ์ด๋™ ์ˆœ์„œ (JAVA)

NaNaRin๐Ÿ™ƒ 2021. 1. 20. 16:55

www.acmicpc.net/problem/11729

 

11729๋ฒˆ: ํ•˜๋…ธ์ด ํƒ‘ ์ด๋™ ์ˆœ์„œ

์„ธ ๊ฐœ์˜ ์žฅ๋Œ€๊ฐ€ ์žˆ๊ณ  ์ฒซ ๋ฒˆ์งธ ์žฅ๋Œ€์—๋Š” ๋ฐ˜๊ฒฝ์ด ์„œ๋กœ ๋‹ค๋ฅธ n๊ฐœ์˜ ์›ํŒ์ด ์Œ“์—ฌ ์žˆ๋‹ค. ๊ฐ ์›ํŒ์€ ๋ฐ˜๊ฒฝ์ด ํฐ ์ˆœ์„œ๋Œ€๋กœ ์Œ“์—ฌ์žˆ๋‹ค. ์ด์ œ ์ˆ˜๋„์Šน๋“ค์ด ๋‹ค์Œ ๊ทœ์น™์— ๋”ฐ๋ผ ์ฒซ ๋ฒˆ์งธ ์žฅ๋Œ€์—์„œ ์„ธ ๋ฒˆ์งธ ์žฅ๋Œ€๋กœ

www.acmicpc.net


๋ฌธ์ œ

์„ธ ๊ฐœ์˜ ์žฅ๋Œ€๊ฐ€ ์žˆ๊ณ  ์ฒซ ๋ฒˆ์งธ ์žฅ๋Œ€์—๋Š” ๋ฐ˜๊ฒฝ์ด ์„œ๋กœ ๋‹ค๋ฅธ n๊ฐœ์˜ ์›ํŒ์ด ์Œ“์—ฌ ์žˆ๋‹ค. ๊ฐ ์›ํŒ์€ ๋ฐ˜๊ฒฝ์ด ํฐ ์ˆœ์„œ๋Œ€๋กœ ์Œ“์—ฌ์žˆ๋‹ค. ์ด์ œ ์ˆ˜๋„์Šน๋“ค์ด ๋‹ค์Œ ๊ทœ์น™์— ๋”ฐ๋ผ ์ฒซ ๋ฒˆ์งธ ์žฅ๋Œ€์—์„œ ์„ธ ๋ฒˆ์งธ ์žฅ๋Œ€๋กœ ์˜ฎ๊ธฐ๋ ค ํ•œ๋‹ค.

   1. ํ•œ ๋ฒˆ์— ํ•œ ๊ฐœ์˜ ์›ํŒ๋งŒ์„ ๋‹ค๋ฅธ ํƒ‘์œผ๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

   2. ์Œ“์•„ ๋†“์€ ์›ํŒ์€ ํ•ญ์ƒ ์œ„์˜ ๊ฒƒ์ด ์•„๋ž˜์˜ ๊ฒƒ๋ณด๋‹ค ์ž‘์•„์•ผ ํ•œ๋‹ค.

์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ด๋™ ์ˆœ์„œ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ. ๋‹จ, ์ด๋™ ํšŸ์ˆ˜๋Š” ์ตœ์†Œ๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์€ ์›ํŒ์ด 5๊ฐœ์ธ ๊ฒฝ์šฐ์˜ ์˜ˆ์‹œ์ด๋‹ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ฒซ ๋ฒˆ์งธ ์žฅ๋Œ€์— ์Œ“์ธ ์›ํŒ์˜ ๊ฐœ์ˆ˜ N (1 ≤ N ≤ 20)์ด ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์˜ฎ๊ธด ํšŸ์ˆ˜ K๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ ์ˆ˜ํ–‰ ๊ณผ์ •์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ K๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๋‘ ์ •์ˆ˜ A B๋ฅผ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ถœ๋ ฅํ•˜๋Š”๋ฐ, ์ด๋Š” A๋ฒˆ์งธ ํƒ‘์˜ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์›ํŒ์„ B๋ฒˆ์งธ ํƒ‘์˜ ๊ฐ€์žฅ ์œ„๋กœ ์˜ฎ๊ธด๋‹ค๋Š” ๋œป์ด๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ 1

3

 

์˜ˆ์ œ ์ถœ๋ ฅ 1

7

1 3

1 2

3 2

1 3

2 1

2 3

1 3


ํ’€์ด

n๊ฐœ์˜ ์›ํŒ์„ 1๋ฒˆ ์žฅ๋Œ€์—์„œ 3๋ฒˆ ์žฅ๋Œ€๋กœ ์˜ฎ๊ธฐ๋ ค๋ฉด

   1. n-1๊ฐœ์˜ ์›ํŒ์„ 1๋ฒˆ ์žฅ๋Œ€(์ถœ๋ฐœ)์—์„œ 2๋ฒˆ ์žฅ๋Œ€(์ค‘๊ฐ„)๋กœ ์˜ฎ๊ธด๋‹ค : ์žฌ๊ท€

   2. ๊ฐ€์žฅ ํฐ ์›ํŒ์„ 1๋ฒˆ ์žฅ๋Œ€(์ถœ๋ฐœ)์—์„œ 3๋ฒˆ ์žฅ๋Œ€(๋„์ฐฉ)๋กœ ์˜ฎ๊ธด๋‹ค

   3. n-1๊ฐœ์˜ ์›ํŒ์„ 2๋ฒˆ ์žฅ๋Œ€(์ค‘๊ฐ„)์—์„œ 3๋ฒˆ ์žฅ๋Œ€(๋„์ฐฉ)๋กœ ์˜ฎ๊ธด๋‹ค : ์žฌ๊ท€

3๊ฐœ์˜ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ณ  ์ด 2^n + 1๋ฒˆ ์ด๋™์ด ํ•„์š”ํ•˜๋‹ค. 

์œ„ ๊ณผ์ •์„ ๊ตฌํ˜„ํ•˜๋ฉด Hanoi(int n, int start, int middle, int goal) ์ด ๋œ๋‹ค.

 

package step10;

import java.io.*;
import java.util.Scanner;

public class B11725 {
	
	static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
	
	static void Hanoi(int n, int start, int middle, int goal ) throws IOException {
		if(n == 1){
			bw.write(start + " " + goal + "\n");
		} else {
			Hanoi(n-1, start, goal, middle);
			bw.write(start + " " + goal + "\n");
			Hanoi(n-1, middle, start, goal);
		}
	}
	
	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		
		bw.write((int)Math.pow(2, n) - 1 + "\n");
		Hanoi(n, 1, 2, 3);
		bw.flush();
	}
}