본문 바로가기
algorithm/Programmers

[JAVA] 배열 회전시키기

by 이쟝 2023. 1. 20.

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


제한사항

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

입출력 예

numbersdirectionresult

[1, 2, 3] "right" [3, 1, 2]
[4, 455, 6, 4, -1, 45, 6] "left" [455, 6, 4, -1, 45, 6, 4]

입출력 예 설명

입출력 예 #1

  • numbers 가 [1, 2, 3]이고 direction이 "right" 이므로 오른쪽으로 한 칸씩 회전시킨 [3, 1, 2]를 return합니다.

입출력 예 #2

  • numbers 가 [4, 455, 6, 4, -1, 45, 6]이고 direction이 "left" 이므로 왼쪽으로 한 칸씩 회전시킨 [455, 6, 4, -1, 45, 6, 4]를 return합니다.

1. 내가 푼 코드 

class Solution {
    public int[] solution(int[] numbers, String direction) {
        int[] answer = new int[numbers.length];
        int length = numbers.length-1;
        
        // 오른쪽일 때
        if(direction.equals("right")) {
            for(int i=0;i<numbers.length;i++){
                // i가 numbers의 크기와 똑같을 때
                if(i == length) answer[0] = numbers[length];
                else  answer[i+1] = numbers[i];
            }
        }else { // 왼쪽일 때
            for(int i=0;i<numbers.length;i++) {
                // i가 numbers의 크기와 똑같을 때
                if(i == length) answer[length] = numbers[0]; 
                else answer[i] = numbers[i+1];
            }
        }
        return answer;
    }
}

2. list와 stream을 활용한 코드

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();
    }
}

Stream은 변환하는 코드가 있어서 그런지 좀 더 많이 오래걸리긴한다. 

ArraysList.add(int index, E e)
list.add(0, "1"); 
list.add(0, "2");
list.add(1, "3");

add(0) : [1]
add(0) : [2. 1]
add(1) : [2, 3, 1]

ArrayList.get(int index)
Arrays.stream(numbers).boxed().collect(Collectors.toList()); // 배열을 list로 변환
list.stream( ).mapToInt(Integer::intValue).toArray( );  // list를 int[ ] 배열로 변환

'algorithm > Programmers' 카테고리의 다른 글

[JAVA] 합성수 찾기  (0) 2023.01.23
[JAVA] 2차원으로 만들기  (0) 2023.01.20
[JAVA] 점의 위치 구하기  (0) 2023.01.19
[JAVA] 가위 바위 보  (0) 2023.01.18
[JAVA] 진료 순서 정하기  (0) 2023.01.14