배열이 한번 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순서대로 새 배열에 넣어주면 된다. 다만 인덱스 값이 배열 크기를 넘어가지 않도록 %연산자를 써주었다.
'HackerRank > Data Structures' 카테고리의 다른 글
[HackerRank] Linked Lists > Print the Elements of a Linked List (0) | 2021.08.14 |
---|---|
[HackerRank C] Tree : Inorder Traversal (0) | 2021.06.27 |
[HackerRank C] Tree : Postorder Traversal (0) | 2021.06.27 |
[HackerRank C] Tree : Preoreder Traversal (0) | 2021.06.27 |
[HackerRank] Arrays : 2D Array - DS (0) | 2021.04.10 |