728x90

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

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

 

๐Ÿ”Ž ๋ฌธ์ œ ํ’€์ด

์–ด๋ฆด ๋•Œ ์—„์ฒญ ์ข‹์•„ํ–ˆ๋˜ ์ถ”์–ต์˜ ํ•˜๋…ธ์ด ํƒ‘ ! ! 

ํ•˜๋…ธ์ด ํƒ‘์€ ์žฌ๊ท€๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ’€ ์ˆ˜ ์žˆ๋Š” ์œ ๋ช…ํ•œ ์˜ˆ์ œ ์ค‘ ํ•˜๋‚˜๋ผ๊ณ  ํ•œ๋‹ค.

 

 

 

์ถœ๋ ฅํ•ด์•ผ ํ•˜๋Š” ๊ฐ’์€ ๋‘ ๊ฐ€์ง€์ด๋‹ค.

์ฒซ์งธ ์ค„์— ์˜ฎ๊ธด ํšŸ์ˆ˜ K, ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ ์ˆ˜ํ–‰ ๊ณผ์ •์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

ํ•˜๋…ธ์ด ์›๋ฐ˜ ์ˆ˜๊ฐ€ ํ™€์ˆ˜์ด๋ฉด ์ œ์ผ ์ž‘์€ ๋งจ ์œ„ ์›๋ฐ˜์„ ๋งจ ์˜ค๋ฅธ์ชฝ ์žฅ๋Œ€์— ์˜ฎ๊ธฐ๋ฉด์„œ ์‹œ์ž‘ํ•˜๊ณ , ์ง์ˆ˜์ด๋ฉด ์ค‘๊ฐ„ ์žฅ๋Œ€์— ์˜ฎ๊ธฐ๋ฉด์„œ ์‹œ์ž‘ํ•œ ๊ธฐ์–ต์ด ์žˆ์–ด์„œ ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ์ ‘๊ทผํ–ˆ๋Š”๋ฐ, ์ „ํ˜€ ๊ด€๊ณ„์—†๋Š” ๋ฌด์˜๋ฏธํ•œ ์ ‘๊ทผ์ด์—ˆ๋‹ค ,,^^

 

์œ„ํ‚ค๋ฐฑ๊ณผ์— ๋ณด๋ฉด ํ•˜๋…ธ์ด ํƒ‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์„ค๋ช…๋˜์–ด์žˆ๋‹ค.

 

 

ํ•˜๋…ธ์ด์˜ ํƒ‘ - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „. ํ•˜๋…ธ์ด์˜ ํƒ‘(Tower of Hanoi)์€ ํผ์ฆ์˜ ์ผ์ข…์ด๋‹ค. ์„ธ ๊ฐœ์˜ ๊ธฐ๋‘ฅ๊ณผ ์ด ๊ธฐ๋‘ฅ์— ๊ฝ‚์„ ์ˆ˜ ์žˆ๋Š” ํฌ๊ธฐ๊ฐ€ ๋‹ค์–‘ํ•œ ์›ํŒ๋“ค์ด ์žˆ๊ณ , ํผ์ฆ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—๋Š” ํ•œ ๊ธฐ๋‘ฅ์— ์›ํŒ๋“ค

ko.wikipedia.org

 

์›ํŒ์ด n๊ฐœ ์ผ ๋•Œ, ์˜ฎ๊ธด ํšŸ์ˆ˜๋Š” " 2์˜ n์ œ๊ณฑ - 1 " ์ด๋‹ค.

์ด๋Ÿฌํ•œ ์ˆ˜๋ฅผ ๋ฉ”๋ฅด์„ผ ์ˆ˜(Mersenne number)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค๊ณ ๋„ ํ•œ๋‹ค.

ํ•˜๋…ธ์ด ํƒ‘์„ ์˜ฎ๊ธฐ๋Š” ์ˆ˜ํ–‰ ๊ณผ์ •์€ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ํ†ตํ•ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ถœ๋ ฅ์€ StringBuilder๋ฅผ ํ™œ์šฉํ•˜์˜€๋‹ค.

 

Key Point

๐Ÿ”‘์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•œ๋‹ค.

 

Java ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	static StringBuilder result = new StringBuilder(); 
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		
		// ์˜ฎ๊ธด ํšŸ์ˆ˜
		
		int movingCount = (int)Math.pow(2, N) - 1;
		result.append(movingCount + "\n");
		
		// ํ•˜๋…ธ์ด ์›๋ฐ˜์„ ์˜ฎ๊ธฐ๋Š” ์ˆ˜ํ–‰ ๊ณผ์ •
		
		moveHanoiDisk(N, 1, 2, 3);
		
		System.out.print(result);
		
	}
	
	static void moveHanoiDisk(int N, int startingPoint, int mid, int destination) {
		
		if (N == 1) {
			result.append(startingPoint + " " + destination + "\n");
			return;
		}
		
		moveHanoiDisk(N-1, startingPoint, destination, mid);
		result.append(startingPoint + " " + destination + "\n");
		moveHanoiDisk(N-1, mid, startingPoint, destination);
		
	}
}

 

 

+

๋ญ”๊ฐ€ 100% ์ดํ•ดํ•˜์ง€ ๋ชปํ•ด์„œ ์ฐœ์ฐœํ–ˆ๋Š”๋ฐ, ์ž๊ธฐ ์ „์— ์šฐ์—ฐํžˆ ์ด ์˜์ƒ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค !

์„ค๋ช…์„ ๋„ˆ๋ฌด ์ž˜ ํ•ด์ฃผ์‹ ๋‹ค ! 

์ตœ๊ณ ๋‹ค !

 

 

728x90

+ Recent posts