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()를 써도 되지 않겠나 싶어서 검증해보니 된다.)
'알고리즘, 문제 풀이기록' 카테고리의 다른 글
문자열 뒤집기 풀이 (0) | 2022.01.12 |
---|---|
루빅스큐브 2단계 구현기록 (0) | 2021.12.06 |
자바의 정석 연습문제 6-1,2 풀이 (0) | 2021.11.17 |
BOJ 8958(OX퀴즈) 풀이 기록 (0) | 2021.11.06 |
별찍기 로직 정리 (0) | 2021.11.05 |