Left Rotation | HackerRank
Given an array and a number, d, perform d left rotations on the array.
www.hackerrank.com
<문제>

input: 첫번째 줄에 첫번째 값은 배열의 크기, 두번째 값은 rotation 횟수 d를 입력받는다.
두번째 줄에는 배열 arr을 입력받는다.
output: d번 왼쪽으로 이동시킨 배열의 결과를 출력한다.
<코드>
int* rotateLeft(int d, int arr_count, int* arr, int* result_count)
{
d = d%arr_count;
*result_count = arr_count;
while(d!=0)
{
int arr_first = arr[0];
for(int i =0 ;i< arr_count;i++)
{
arr[i] = arr[i+1];
}
arr[arr_count-1] = arr_first;
d--;
}
return arr;
}
<풀이>
처음에는 arr배열과 같은 크기의 배열 arr_temp를 선언하고, 배열의 크기만큼 arr[j]에 arr_temp[j+1]을 대입하는 것을 반복하고 다시 arr_temp와 arr 배열을 복사한 뒤에야 d값을 반복시켰는데, 이렇게 코드를 돌리니 for 문 내부에 for문이 2개나 있어 시간초과문제가 발생했다.
그래서 arr_temp 배열을 선언하지 않고, arr배열의 인덱스 0 원소를 arr_first 변수에 저장하고, for 문을 통해 arr[i]=arr[i+1]을 하여 한 칸씩 왼쪽으로 보냈다. for문이 끝난 뒤 arr배열의 마지막에 arr_first값을 넣고 d값을 하나 감소시켜 d가 0이 될 때까지 반복했다.
이를 통해 문제를 풀 수 있었다.
<실행결과>

'c언어 스터디 > HackerRank' 카테고리의 다른 글
| [HackerRank] Repeated String (0) | 2021.08.14 |
|---|---|
| [HackerRank] Equalize the Array (0) | 2021.08.05 |
| [HackerRank] Drawing Book (0) | 2021.07.27 |
| [HackerRank] Utopian Tree (0) | 2021.07.27 |
| [HackerRank] Print in Reverse (0) | 2021.07.27 |