-
[Codility] CyclicRotation 87점→100점알고리즘 2019. 3. 3. 16:56
문제출처 : https://app.codility.com/programmers/lessons/2-arrays/cyclic_rotation/
문제요약 : 입력받은 횟수(K)만큼 배열을 순환시키는 것.
맨뒤의 요소를 뽑아서 앞으로 넣은후 한칸씩 인덱스를 밀어주는 형식
[100점]
문제를 보면 배열의 맨뒤의 요소를 뽑아서 앞으로 넣은 후 그뒤에 요소들을 하나씩 밀어가고있다.
ex) 2회전
주어진배열 {1, 2, 3}
1회전 {3, 1, 2}
2회전 {2, 3, 1}
자료구조를 공부를했다면 쉽게 풀 수 있는 문제다. 바로 선입선출(FIFO)성질을 가진 Que를 선택했다.
조금 아쉬운 점은 Que를 Array로 변환하는 과정이 조금 지저분하다는 생각이 들었다. 충분히 리팩토링 할 코드라고 생각한다.
12345678910111213141516171819202122232425262728293031323334353637package test_java2;import java.util.ArrayDeque;import java.util.Deque;public class Main {public static void main(String[] args) {int[] arr = { 1, 2, 3, 4 };solution(arr, 3);}public static int[] solution(int[] A, int K) {if (A.length == 0) return A;Deque<Integer> que = new ArrayDeque<Integer>();for (Integer i : A) que.add(i);for(int j=0; j<K; j++) {Integer temp = que.pollLast();que.addFirst(temp);}Object[] obj = que.toArray();int[] result = new int[obj.length];for (int j = 0; j < obj.length; j++) {result[j] = (int) obj[j];}return result;}}// CALSS ENDcs 14행 : 처음에 이부분 예외처리 안해서 87점 떳었음..입력받은 배열이 null 일때 NPE난다고..ㅎㅎ
다풀고나서 다른 사람들이 푼거 찾아보니, 대부분 아래처럼짯다.. 다들 어떻게 저렇게 똑같은 로직을 짠거지? 신기 할 따름이다
123456int result[] = new int[arraySize];for (int i = 0; i < arraySize; i++) {result[(i + K) % arraySize] = A[i];}cs '알고리즘' 카테고리의 다른 글
[Codility] FrogJmp 100점 (0) 2019.03.23 [Codility] BinaryGap 100점 (0) 2019.03.14 [Codility] OddOccurrencesInArray 55점→100점 (0) 2019.02.16 [알고리즘] 삽입정렬 (0) 2018.08.20 [알고리즘] 선택정렬 (0) 2018.08.20