[오늘의 코테연습장] [LeetCode] Rotate Array

Mini_me·2023년 8월 24일
0

공부[코테연습장]

목록 보기
17/36
post-thumbnail

🔖 문제

  • nums와 array의 요소들을 오른쪽으로 옮기는 횟수 k가 주어진다.

  • 오른쪽으로 k번 옮겼을 때의 nums를 반환하세요.

🔖접근 방식

문제를 보자마자 Deque를 이용하면 쉽게 풀릴 것 같다라는 생각이 들었습니다.

  1. 새로운 Deque 생성
  2. rotation = k % 배열의 길이 로 설정
  3. 새로운 배열 생성 ( deque에서 뺀 요소들을 담을 임시 배열 )
  4. dequed에 nums 배열 요소 담기
  5. rotation 만큼 deque의 마지막 요소들 뺴기
  6. rotation 만큼 deque에다가 뺀 요소들을 첫번째 요소들로 add 하기
  7. deque를 순회하며, nums에 deque 요소들 담기
    ( for 공간복잡도 O(1) )

🔖문제 풀이 코드

class Solution {
    public void rotate(int[] nums, int k) {
        //deque로 변환
        //k만큼 반복문 반복해서 removeLast 한후
        // addFirst하기
        Deque<Integer> deque = new LinkedList<>();
        int rotation = k % nums.length; 
        int[] ele = new int[nums.length];
        
        if (nums.length <= 1 || k <= 0) {
            return;
        }

        for(int i = 0 ; i<nums.length ; i++){
            deque.add(nums[i]);
        }
        for(int i = 0 ; i<rotation ; i++){
          ele[i]  = deque.pollLast();
        }
        for(int i = 0 ; i<rotation ; i++){
            deque.addFirst(ele[i]);
        }
        int index = 0;
        for (Integer num : deque) {
            nums[index++] = num;
        }

    }
}

0개의 댓글

관련 채용 정보