HackerRank/Data Structures

[HackerRank(C)] Arrays : Left Rotation

ruming 2021. 5. 29. 08:40

배열이 한번 rotation되면 왼쪽에 있는 값이 오른쪽으로 가게 되는데, 이것을 d번 반복하면 된다.

 

input으로 배열의 크기, rotation 수, 배열을 입력받는다.

output은 d번 rotation된 배열이다.

 

int* rotateLeft(int d, int arr_count, int* arr, int* result_count) {
    int *a = malloc(arr_count*sizeof(int));
    *result_count = arr_count;
    for(int i=0; i<arr_count; i++){
        a[i] = arr[(d+i)%arr_count];
    }
    return a;
}

arr_count 크기의 배열을 하나 생성해주었다.

처음에는 왼쪽에 있는 값을 swap으로 오른쪽으로 옮길까 했는데, 그렇게 하면 (arr_count-1)*d만큼 수를 옮겨야 하니까 시간초과가 날 수도 있다고 생각했다. 생각해보면 과정이 아니라 돌아간 결과만 출력하는 것이기 때문에, 원래 배열에서 d+i순서대로 새 배열에 넣어주면 된다. 다만 인덱스 값이 배열 크기를 넘어가지 않도록 %연산자를 써주었다.