나의 풀이.
처음에 문제 보고 배열이나 ArrayList만들어서 하나씩 할당해줘야 하다가
양 쪽 끝에서 데이터의 추가 / 삭제 등이 필요할 때 유용한 데크 생각이 났다.
데크는 양쪽에서 삽입과 삭제가 모두 가능한 자료구조로
Doubly-ended Queue 이며 Stack과 Queue를 합친 형태로 이해하면 된다.
그래서 right면 맨 끝의 요소를 빼서 제일 앞에 넣어주고
left면 첫번째 요소를 빼서 맨 끝으로 넣어주면 풀 수 있다.
import java.util.ArrayDeque;
import java.util.Deque;
class Solution {
public int[] solution(int[] numbers, String direction) {
int[] answer = new int[numbers.length];
Deque<Integer> deque = new ArrayDeque<>();
for (int num : numbers) {
deque.offer(num);
}
if (direction.equals("right")) {
int num = deque.pollLast();
deque.offerFirst(num);
} else if (direction.equals("left")) {
int num = deque.pollFirst();
deque.offerLast(num);
}
for (int i = 0; i < answer.length; i++) {
answer[i] = deque.poll();
}
return answer;
}
}
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/120844?language=java
'CODING TEST' 카테고리의 다른 글
프로그래머스 - 문자열 안에 문자열 (0) | 2023.05.22 |
---|---|
백준 5613번 - 계산기 프로그램 (0) | 2023.05.22 |
프로그래머스 - 한 번만 등장한 문자 (0) | 2023.05.22 |
프로그래머스 - JadenCase 문자열 만들기 (0) | 2023.05.21 |
프로그래머스 - 최댓값과 최솟값 (0) | 2023.05.20 |