CODING TEST

프로그래머스 - 배열 회전시키기

우진하다 2023. 5. 22. 14:37

 

나의 풀이.

처음에 문제 보고 배열이나 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