0x07 강 - 문제. 카드 놓기

JUN·2024년 6월 20일
0

codingTest

목록 보기
14/23

📝 문제 1. 카드 놓기

링크 : https://www.acmicpc.net/problem/18115

  1. 문제 설명

  2. 문제 풀이

    1. 제일 위의 카드 1장을 바닥에 내려놓는다.
    2. 위에서 두 번째 카드를 바닥에 내려놓는다. 카드가 2장 이상일 때만 쓸 수 있다.
    3. 제일 밑에 있는 카드를 바닥에 내려놓는다. 카드가 2장 이상일 때만 쓸 수 있다.

    해당 함수를 거꾸로 했다는 뜻이다. 그러니깐

    1. 바닥에 있던 카드를 제일 위로 쌓는다.
    2. 바닥에 있던 카드를 두번째로 옮긴다.
    3. 바닥에 있던 카드를 제일 밑으로 옮긴다.

    또한 바닥에 놓이는 카드는 스택처럼 LIFO구조로 쌓이므로 함수들의 순서는 반대로 진행되어야한다.

    //카드 놓기 18115
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    import java.util.Deque;
    import java.util.LinkedList;
    
    public class Main {
    
      public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        Deque<Integer> originalDeck = new LinkedList<>();
    
        //input
        int N = Integer.parseInt(br.readLine());
        String[] cmds = br.readLine().split(" ");
    
        for (int i = N - 1; i >= 0; i--) {
          switch (cmds[i]) {
            case "1":
              originalDeck.addFirst(N-i);
              break;
            case "2":
              int temp = originalDeck.peekFirst();
              originalDeck.removeFirst();
              originalDeck.addFirst(N-i);
              originalDeck.addFirst(temp);
              break;
            case "3":
              originalDeck.addLast(N-i);
              break;
          }
        }
        for (int i = 0; i < N; i++) {
          sb.append(originalDeck.pollFirst()).append(' ');
        }
        System.out.println(sb.toString());
        br.close();
      }
    }
profile
순간은 기록하고 반복은 단순화하자 🚀

0개의 댓글