[PS] 프로그래머스 배열 회전시키기

이진용·2023년 3월 27일
0

문제 설명

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


생각해보기

구현은 쉬울 것이다.

  1. 배열을 한 바퀴 돌며 swap 하기
  • 추가 공간 사용이 없다.
  • 배열 swap은 빠르다.
  • 구현이 딱이 어렵거나 귀찮지도 않다.
  1. 배열을 두 개로 자르고 뒤집어 붙이기
  • 배열의 크기만큼 추가 공간 사용이 있다. System.arraycopy 또는 Arrays.copyRanges
  • 구현도 상대적으로 귀찮다.
  • 딱히 이득이 없다.
  1. 컬렉션 사용하기
  • 컬렉션의 추가 공간 사용이 있다.
  • 배열 swap에 비해 컬렉션의 add가 느리다.
  • 구현이 제일 쉽다.(아마도)

1번으로 한다.

풀이

import java.util.*;

class Solution {
    public int[] solution(int[] numbers, String direction) {
        return direction.equals("right") ? rotateRight(numbers) : rotateLeft(numbers);
    }
    
    private int[] rotateRight(int[] arr) {
        for(int i = arr.length-1; i > 0; i--) {
            swap(arr, i, i-1);
        }
        return arr;
    }
    
    private int[] rotateLeft(int[] arr) {
        for(int i = 0; i < arr.length -1; i++) {
            swap(arr, i, i+1);
        }
        return arr;
    }
    
    private void swap(int[] arr, int i, int j) {
        int t = arr[i];
        arr[i] = arr[j];
        arr[j] = t;
    }
}

profile
멋있는 개발자가 되어야지.

0개의 댓글