프로그래머스/Lv. 0(코딩테스트 입문)

[프로그래머스 코딩테스트] 배열 회전시키기(Java)

Sigfriede 2023. 4. 20. 14:41

  문제 설명

  정수가 담긴 배열 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];
        if (direction.equals("right")) {
            answer[0] = numbers[numbers.length - 1];
            for (int i = 0; i < numbers.length - 1; i++) {
                answer[i + 1] = numbers[i];
            }
        } else {
            answer[numbers.length - 1] = numbers[0];
            for (int i = 1; i < numbers.length; i++) {
                answer[i - 1] = numbers[i];
            }
        }
        return answer;
    }
}

  문제는 배열만 회전시킬 뿐, 원소를 추가하거나 제거하는 기능은 요구하지 않아 answer의 배열 크기를 numbers와 동일하게 설정하여 생성했습니다.

  if문으로 direction이 right일 때와 left일 때(이때는 else로 별도 명시x)로 구분했습니다. 만약 direction이 right일 경우 배열은 뒤로 한 칸씩 밀리는 것 같은 모습을 보여줍니다. 배열의 마지막 인덱스는 맨 앞으로 옵니다. 따라서 answer[0]에는 numbers의 마지막 원소를 할당하고, 나머지 자리에는 for문으로 answer[i + 1]에 numbers[i]를 할당하여 인덱스가 한 칸씩 밀리도록 합니다.

  이는 else에서도 동일합니다. 다만 원소는 right와 반대 방향으로 움직여야 하므로, answer의 마지막 자리에는 numbers의 0번 인덱스의 원소가 오도록 할당합니다. 마찬가지로 for문으로 answer[i - 1]에 numbers[i]를 할당해 한 칸씩 당겨줍니다.