<Algorithm> 202. 하노이 탑 이동순서(BJO)
by BFine반응형
1. 11729번 하노이 탑 이동순서(BJO)
사용 알고리즘 : 재귀, 분할정복
-
코드는 간단하지만 이해가 필요한 문제인 것 같다. 2차원 배열 이외에 이런 분할정복은 처음인데 많이 해봐야 겠다.
또 단순 println 했을경우 시간초과가 발생해서 StringBuilder를 사용했다. 이부분에서 속도를 줄일 수 있기 때문에 중요한 부분이다.
문제에 대한 접근&생각
- 순서대로 쌓여있는 탑을 3번째 탑으로 이동 시켜야함 -> 직접해보면 n-1 번쨰 까지 탑을 두번째로 옮겨야함 -> 재귀!
- 이후에 n번째 탑을 3번으로 옮김 -> 2번상에 대해 위의 동작을 반복
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import java.util.Scanner; public class Main { static StringBuilder sb = new StringBuilder(""); public static void main(String[] args) { Scanner sc = new Scanner(System.in); /****************************** * 재귀를 이용하여 n-1 번쨰까지 * 2번 단상으로 옮기고 * n번째를 3번 단상으로 옮긴후 * 다시 2번 단상에서 3번단상으로 옮기는 * 순서를 구한다. *******************************/ int n = sc.nextInt(); System.out.println((1<<n)-1); move(n, 1, 3); System.out.println(sb); } private static void move(int n, int a, int b) { if(n==0) return; move(n-1, a, 6-a-b); sb.append(a+" "+b).append("\n"); move(n-1, 6-a-b, b); } } | cs |
참고 & 출처
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 204. 2차원 배열의 합(BJO) (0) | 2019.05.22 |
---|---|
<Algorithm> 203. 탑(BJO) (0) | 2019.05.21 |
<Algorithm> 201. 게임맵최단거리(Programmers) (0) | 2019.05.18 |
<Algorithm> 200. 설탕배달(BJO) (0) | 2019.05.07 |
<Algorithm> 199. 이친수(BJO) (0) | 2019.05.05 |
블로그의 정보
57개월 BackEnd
BFine