메모리: 74.5 MB, 시간: 1.93 ms
코딩테스트 연습 > 코딩테스트 입문
정확성: 100.0
합계: 100.0 / 100.0
정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.
numbers의 길이 ≤ 20direction은 "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;
}
}
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을 사용하여 풀어봐야겠다.