입력값을 받아오고 프로그램을 실행시키기 위한 Main class와 단어를 밀어내기 위한 PushWords class를 구현했다.
private static final String PROMPT = "> ";
Scanner sc = new Scanner(System.in);
System.out.print(PROMPT);
String word = sc.next();
int n = sc.nextInt();
String direction = sc.next().toLowerCase();
sc.close();
PushWords pw = new PushWords(word);
if (pw.isLeft(n, direction)) pw.pushLeft(n);
else pw.pushRight(n);
pw.printWord(pw.deque);
Deque<Character> deque;
public PushWords(String word) {
deque = new ArrayDeque<>();
for (int i = 0; i < word.length(); i++) {
deque.addLast(word.charAt(i));
}
}
메서드 | 기능 |
---|---|
isLeft(n, direction) | 이동 방향 확인, 왼쪽으로 밀어야 되면 true, 아니면 false를 반환 |
pushLeft(n) | 단어를 n의 절댓값만큼 왼쪽으로 밀기 |
pushRight(n) | 단어를 n의 절댓값만큼 오른쪽으로 밀기 |
printWord(deque) | 단어 출력 |
isLeft 메서드 : 이동 방향 확인, 왼쪽으로 밀어야 되면 true, 아니면 false를 반환
n이 양수 일 때는 입력한 문자대로, 음수일 때는 반대 방향으로 push된다는 점을 고려하여 코드를 설계하였다.
boolean isLeft(int n, String direction) {
if ((n > 0 && direction.equals("l")) || (n < 0 && direction.equals("r")))
return true;
return false;
}
pushLeft 메서드 : 단어를 n의 절댓값만큼 왼쪽으로 밀기
n이 음수인 경우를 고려하여, 이동 횟수를 저장하는 변수(numOfMovements)에 n의 절댓값을 저장하였다. deque의 첫 번째 원소를 꺼내어 마지막에 삽입하는 작업을 이동 횟수만큼 반복하면, 주어진 숫자 갯수만큼 단어를 밀어내고 밀려나간 단어를 반대쪽에 채울 수 있다.
void pushLeft(int n) {
int numOfMovements = Math.abs(n);
for (int i = 0; i < numOfMovements; i++) {
deque.addLast(deque.removeFirst());
}
}
pushRight 메서드 : 단어를 n의 절댓값만큼 오른쪽으로 밀기
pushLeft와 같은 방법으로 구현할 수 있다. 이 경우에는 deque의 마지막 원소를 꺼내어 deque의 첫 번째 원소로 삽입해주면 된다.
void pushRight(int n) {
int numOfMovements = Math.abs(n);
for (int i = 0; i < numOfMovements; i++) {
deque.addFirst(deque.removeLast());
}
}
printWord 메서드 : 단어 출력
pushLeft 또는 pushRight 메서드를 실행 한 뒤, deque를 순회하며 요소들을 출력하면 결과값을 얻을 수 있다.
void printWord(Deque<Character> deque) {
for (char x : deque) {
System.out.print(x);
}
}
영상 출처
루빅스큐브 문제는 스위프트를 어느정도 알면 풀수 있나요?
아니면 스위프트 말고 다른 지식도 있어야 풀수 있나요?