Blog

배열 회전시키기

문제 #

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

  • 제한사항
    • 3 ≤ numbers의 길이 ≤ 20
    • direction은 “left” 와 “right” 둘 중 하나입니다.
  • 입출력 예
    numbers direction result
    [1, 2, 3] “right” [3, 1, 2]
    [4, 455, 6, 4, -1, 45, 6] “left” [455, 6, 4, -1, 45, 6, 4]

나의 풀이 #

class Solution {
    public int[] solution(int[] numbers, String direction) {
        int[] answer = new int[numbers.length];
        int direc = 0;
        direc = direction.equals("right")? -1 : 1;
        
        
        for(int i = 0; i<numbers.length; i++){
            answer[i] = numbers[(numbers.length+i+direc)%numbers.length];
        }
        
        return answer;
    }
}
  • 방향이 오른쪽일 경우 answer[i+1]=numbers[i] or answer[i]=numbers[i-1]
  • 인덱스에 -1이나 +1을 할경우 인덱스로 -1혹은 길이보다 큰 값이되어 오류발생
  • n의배수+(수식)을 n으로 나눈 나머지는 (수식)과 동일함을 이용하여 오류방지

다른 사람의 풀이 #

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

class Solution {
    public int[] solution(int[] numbers, String direction) {
        List<Integer> list = Arrays.stream(numbers).boxed().collect(Collectors.toList());

        if (direction.equals("right")) {
            list.add(0, list.get(list.size() - 1));
            list.remove(list.size() - 1);
        } else {
            list.add(list.size(), list.get(0));
            list.remove(0);
        }
        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}
  • 이 솔루션은 numbers 배열을 List로 변환합니다.
  • direction"right"인 경우, 마지막 요소를 앞에 추가하고 마지막 요소를 제거합니다.
  • direction"left"인 경우, 첫 번째 요소를 끝에 추가하고 첫 번째 요소를 제거합니다.
  • 마지막으로, List를 배열로 다시 변환하고 반환합니다.

관련개념 학습 #

  • 관련 개념을 찾아서 공부한 내용을 적는다.
  • ctrl + p로 내가 필기한 내용 중에서 관련내용이 있는지 찾아서 그 페이지의 링크를 복사하여 붙혀넣는다.
  • 필기 페이지에도 이 문제의 링크를 복사하여 “관련 문제"라고 써놓고 붙혀넣는다.