#189 Rotate Array

전우재·2023년 8월 24일
0

leetcode

목록 보기
6/21

문제링크 - https://leetcode.com/problems/rotate-array/description/?envType=study-plan-v2&envId=top-interview-150

문제 분석

  • 1 <= nums.length <= 10^5
  • -231 <= nums[i] <= 231 - 1
  • 0 <= k <= 10^5
    배열의 위치를 우측으로 시프트 연산한다.

문제 해결

문제 해결 로직

자주 봤던 문제로 나머지 연산을 통해 변경되는 위치를 정했다.
하지만 시간 초과가 생겨 연산 과정을 런타임에서 따라가지 않고 연산 횟수를 사용해 바로 위치를 결정했다.
마지막에는 k가 너무 큰 숫자일 때 인덱스가 -위치를 잡아 빼주는 k도 나눗셈을 수행했다.

  1. int array nums과 k를 입력받는다.
  2. 각 배열의 요소가 연산 이후 위치할 곳의 값을 가져와 넣는다.
    2-1. 인덱스가 범위를 벗어나지 않도록 덧셈과 나머지 연산을 활용해야한다.

코드 작성

class Solution {
  public void rotate(int[] nums, int k) {
    step(nums, k);
  }
  public void step(int[] nums, int k){
    int[]temp = Arrays.copyOf(nums, nums.length);
    for(int i=0;i<nums.length;i++){
      nums[i] = temp[(i-(k%nums.length)+nums.length)%nums.length];
    }
  } 
}

회고

  • 계산 식이 알아보기 어려우며 해당 계산 식을 좀 더 정리하면 높은 시간 복잡도 점수를 얻을 수 있을 것 같다.

0개의 댓글

관련 채용 정보