알고리즘 - 배열 회전시키기 - 120844

워니·2023년 3월 28일

알고리즘

목록 보기
9/30
post-thumbnail

[level 0] 배열 회전시키기 - 120844

문제 링크

성능 요약

메모리: 74.5 MB, 시간: 1.93 ms

구분

코딩테스트 연습 > 코딩테스트 입문

채점결과


정확성: 100.0
합계: 100.0 / 100.0

문제 설명

정수가 담긴 배열 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]

입출력 예 설명

입출력 예 #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합니다.

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges


  • 내 풀이
class Solution {
    public int[] solution(int[] numbers, String direction) {
        List<Integer> list = new ArrayList<>();
        if (direction.equals("right")) {
            for (int i = 0; i < numbers.length; i++) {
                list.add(numbers[i]);
            }
            list.add(0, list.get(list.size() - 1));
            list.remove(list.size() - 1);
        }
        if (direction.equals("left")) {
            for (int i = 0; i < numbers.length; i++) {
                list.add(numbers[i]);
            }
            list.add(list.size(), list.get(0));
            list.remove(0);
        }
        int[] answer = list.stream()
                .mapToInt(Integer::intValue)
                .toArray();
        return answer;
    }
}
  • TDD
class SolutionTest {

    @Test
    @DisplayName("[1, 2, 3], right == [3,1,2]")
    void solution() {
        int[] numbers = {1, 2, 3};
        int[] answer = {3, 1, 2};
        Assertions.assertThat(new Solution().solution(numbers, "right")).isEqualTo(answer);
    }

    @Test
    @DisplayName("[4, 455, 6, 4, -1, 45, 6], left == [455, 6, 4, -1, 45, 6, 4]")
    void solution2() {
        int[] numbers = {4, 455, 6, 4, -1, 45, 6};
        int[] answer = {455, 6, 4, -1, 45, 6, 4};
        Assertions.assertThat(new Solution().solution(numbers, "left")).isEqualTo(answer);
    }
}

  • 풀이

    direction에 따라 2경우를 나누어서 풀었다.
    right의 경우 numbers[nubers.length] 값이 맨 앞으로 이동하게된다.
    left의 경우 numbers[0] 값이 맨 뒤로 이동하게 된다.
    배열보다는 arrayList가 더 편하기때문에
    list를 만들어 진행하였다.
    문제에 return 타입이 명시되어있기때문에
    int[]로 다시 변환해주는 작업으로 마무리하였다.
    다음에는 deque을 사용하여 풀어봐야겠다.

profile
Backend-Dev

0개의 댓글