이 영역을 누르면 첫 페이지로 이동
시간의화살 블로그의 첫 페이지로 이동

시간의화살

페이지 맨 위로 올라가기

시간의화살

행복하세요

[백준] 15500 이상한 하노이 탑 - Java

  • 2022.05.01 15:32
  • Algorithm/Baekjoon

 

 

 

스택을 사용해서 풀 수 있는 문제이다.

 

기존 하노이 탑에서 조건이 많이 수정돼서 재귀를 사용할 필요가 없다.

 

1 2 3 세 개의 장대가 주어지고, 3번 장대에 탑을 쌓아주면 되는 상황이다.

 

 

1. 1번 장대에 걸린 요소들을 검사해 3번 장대에 들어갈 순서인지 확인하고, 맞으면 3번 아니면 2번으로 옮긴다.

 

2. 2번 장대에 대해서도 위와 같은 작업을 수행한다.

 

3. 3번 장대에 탑이 완성되면 마무리한다.

 

 

 

import java.util.*;
import java.io.*;
 
public class Main {
 
	static StringBuilder sb;
 
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
		int N = Integer.parseInt(br.readLine());

		Stack<Integer> st1 = new Stack<>();
		Stack<Integer> st2 = new Stack<>();
		Stack<Integer> st3 = new Stack<>();

		StringTokenizer st = new StringTokenizer(br.readLine());

		StringBuilder sb = new StringBuilder();


		for(int i=0; i<N; i++){	
			st1.add(Integer.parseInt(st.nextToken()));	
		}


		int cnt = 0;
		int target = N;		

		while(true){

			if(st3.size() == N){
				break;
			}


			while(!st1.empty()){
				int temp = st1.pop();
				cnt++;

				if(temp == target){
					st3.push(temp);
					target--;
					sb.append(1 + " " + 3 + "\n");
					if(target == 0){
						break;
					}
				}else{
					st2.push(temp);
					sb.append(1 + " " + 2 + "\n");
				}
			}

			while(!st2.empty()){
				int temp = st2.pop();
				cnt++;

				if(temp == target){
					st3.push(temp);
					target--;
					sb.append(2 + " " + 3 + "\n");
					if(target == 0){
						break;
					}
				}else{
					st1.push(temp);
					sb.append(2 + " " + 1 + "\n");
				}
			}



		} // end of first while

		System.out.println(cnt);
		System.out.println(sb);


		
	}
}
반응형

'Algorithm > Baekjoon' 카테고리의 다른 글

[백준] 7795 먹을 것인가 먹힐 것인가 - Java  (0) 2022.05.04
[백준] 1182 부분수열의 합 - Java  (0) 2022.05.02
[백준] 11729 하노이 탑 이동 순서 - Java  (0) 2022.05.01
[백준] 17952 과제는 끝나지 않아! - Java  (0) 2022.05.01
[백준] 9625 BABBA - Java  (0) 2022.05.01

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [백준] 7795 먹을 것인가 먹힐 것인가 - Java

    [백준] 7795 먹을 것인가 먹힐 것인가 - Java

    2022.05.04
  • [백준] 1182 부분수열의 합 - Java

    [백준] 1182 부분수열의 합 - Java

    2022.05.02
  • [백준] 11729 하노이 탑 이동 순서 - Java

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

    2022.05.01
  • [백준] 17952 과제는 끝나지 않아! - Java

    [백준] 17952 과제는 끝나지 않아! - Java

    2022.05.01
다른 글 더 둘러보기

정보

시간의화살 블로그의 첫 페이지로 이동

시간의화살

  • 시간의화살의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (607)
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • Java (19)
      • JavaScript (15)
      • C (25)
      • C++ (12)
      • Python (1)
      • PHP (2)
    • Computer Science (69)
      • Operating System (18)
      • Computer Network (17)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Github Actions (0)
      • Amazon Web Service (8)
    • Machine Learning (28)
      • AI Introduction (28)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • Solutions (14)
    • Life Logs (0)
    • 낙서장 (25)

최근 글

나의 외부 링크

메뉴

  • 홈

정보

13months의 시간의화살

시간의화살

13months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © 13months.

티스토리툴바