본문 바로가기
알고리즘/알고리즘 문제풀이

programmers - 배열 회전 시키기 java

by sh119 2024. 7. 1.

해당 문제는 초급 문제로 배열에 관한 문제이다.

 

문제 설명

정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.

 
제한사항
  • 3 ≤ numbers의 길이 ≤ 20
  • direction은 "left" 와 "right" 둘 중 하나입니다.

입출력 예bersdirectionresult
[1, 2, 3] "right" [3, 1, 2]
[4, 455, 6, 4, -1, 45, 6] "left" [455, 6, 4, -1, 45, 6, 4]

내가 푼 코드

import java.util.*;

class Solution {
    public int[] solution(int[] numbers, String direction) {
        int[] answer = new int[numbers.length];
        
        if(direction.equals("right")){
            answer[0] = numbers[numbers.length - 1];
            for(int i=numbers.length-2; i>=0; i--){
                answer[i+1] = numbers[i];
            }
        }
        else{
            answer[numbers.length - 1] = numbers[0];
            for(int i=0; i<numbers.length-1; i++){
                answer[i] = numbers[i+1];
            }
        }
        
        return answer;
    }
}

이때 방향을 나타내는 문자열이 하나여서 그냥 배열 자체를 옮겨주었지만,

만약 방향을 여러 번 이동해야한다면

왼쪽, 오른쪽 양 방향으로 삽입 삭제가 가능해야하므로 Deque(ArrayDeque)를 이용하거나

LinkedList를 이용하여 구현해 줄 수있을 것 같다.

 

덱과 링크드리스트 모두 삽입, 삭제시 시간복잡도는 O(1) 이므로 둘 다 해당 문제에 적합 할 것으로 보인다.

 

만약 위와 같이 코드를 짠다면 numbers의 값을 모두 자료구조 안에 넣고 해당 자료구조의 함수를 써서 진행해주면 된다.