본문 바로가기

알고리즘, 문제 풀이기록

루빅스 큐브 1단계 구현 기록

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String[] input = new String[3];

        for (int i = 0; i < input.length; i++) {
            input[i] = sc.next();
        }

        Deque<Character> chars = new ArrayDeque<>();
        for (int i = 0; i < input[0].length(); i++) {
            chars.add(input[0].charAt(i));
        }

        if (input[2].equals("L")) {
            for (int i = 0; i < Integer.parseInt(input[1]); i++) {
                chars.add(chars.pollFirst());
            }
        } else {
            for (int i = 0; i < Integer.parseInt(input[1]); i++) {
                chars.addFirst(chars.pollLast());
            }
        }

        for (int i = 0; i < input[0].length(); i++) {
            System.out.print(chars.pop());
        }
    }
}

루빅스 큐브 1단계를 구현하면서 핵심은 Deque(/dek/)에 있다고 생각한다. Deque는 Double-ended queue의 약자이다. 일단 내가 이해하기로는 양쪽으로 자료의 입출력을 받을 수 있는 자료구조가 Deque이다. Deque의 메서드를 적재적소에 활용하려고 노력했다. Deque와 그에 관한 메서드가 정리되어있는 공식문서이다.

 사용한 메서드를 정리하면 다음과 같다.

  • add() : 후입을 목적으로 사용했다.
  • pollFirst() : 가장 앞의 요소를 삭제하고 반환하기 위해 사용했다.
  • pollLast() : 가장 뒤의 요소를 삭제하고 반환하기 위해 사용했다.
  • pop() : deque에 저장돼있는 요소들을 순서대로 for문을 통해 순서대로 출력하기 위해 사용했다. 가장 앞의 요소를 삭제하고 반환하는 듯 하다. (쓰다보니 pollFirst()를 써도 되지 않겠나 싶어서 검증해보니 된다.)