본문 바로가기

잡다한 기술

[코딜리티/Codility] CyclicRotation 문제




# 문제


배열이 주어지고 정수가 주어지면, 

정수의 수 만큼 배열의 끝값을 앞으로 옮기고, 

정리된 배열을 리턴하는 함수를 만들라는 것이다.


메게변수로는 A와 K가 주어진다.

A는 정수 배열이 넘어오고

 K는 로테이션 횟수이다.


예를 들어


A = [3, 8, 9, 7, 6]

K = 3


가 주어지면 리턴 배열은 


[9, 7, 6, 3, 8]


가 된다.


다른 수로 예를 들어보자.

K=5이라면


[3, 8, 9, 7, 6] -> [6, 3, 8, 9, 7]

[6, 3, 8, 9, 7] -> [7, 6, 3, 8, 9]

[7, 6, 3, 8, 9] -> [9, 7, 6, 3, 8]


이런식으로 나올테고


A = [0, 0, 0]

K = 1


라면 [0, 0, 0] 이 나올것이다.


A = [1, 2, 3, 4]

K = 4


라면 [1, 2, 3, 4]가 나올것이다.



# 소스코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Solution {
    // A : 배열
    // K : 이동할 배열
    public int[] solution(int[] A, int K) {
        int[] result = (A.length > 0)? new int[A.length] : A;
        int index = 0;
        
        // 로테이션을 돌릴 필요가 없을때는 들어온 값을 그대로 리턴해준다.
        if((A.length % K) == 0 || (A.length <= 0)){
            return A;
        }else{
            // K가 배열의 길이보다 많을경우 최소한으로 반복문을 돌리기 위해
            // K를 배열의 길이만큼 나누고 나머지 값만 가져온다.
            if(A.length < K){
                K = K % A.length;
            }
            
            // 배열 정리 반복문
            for(int i = (A.length - K); i <= (A.length - 1); i++){
                result[index] = A[i];
                index++;
            }
            
            // 배열 정리 반복문
            for(int i = 0; i < (A.length - K); i++){
                result[index] = A[i];
                index++;
            }
            
            return result;
        }
    }
}
cs


# 마무리


위 포스트는 제가 직접 제작한 것 입니다.

그렇기 때문에 틀린점이나 설명이 엉성한 점이 존재할 수 있습니다.

만약 틀린점이나 설명이 엉성한 부분이 존재하면 댓글로 알려주세요.

빠른 처리 하도록 하겠습니다.


티스토리 앱으로는 댓글 이용이 불가능 하므로 웹 브라우저로 봐 주세요

(URL : http://junprogramer.tistory.com/)


읽어주셔서 감사합니다.