문제로 풀어보는 알고리즘 : 시작하기

오른쪽으로 배열 회전하기 배열 arr[]에서 위치 s, t 사이로 1만큼 오른쪽으로 회전시켜보자. 단, arr[t]의 경우, arr[s]로 복사하면 된다. 풀이 순서 i = t : 뒤부터 탐색을 시작하자. arr[i] = arr[i - 1] : 1 만큼 왼쪽으로 이동. arr[s] 에 이르선 arr[s - 1] 이 더 이상 없는 문제가 있음. 사전에 arr[t] 를 last 에 저장하여 arr[s] 에 대입한다. 코드 풀이 void right_rotate(int arr[], int s, int t) { int i, last; last = arr[t]; for (i = t; i > s; i--) arr[i] = arr[i - 1]; arr[s] = last; } N 만큼 이동하기 1만큼 이동하는 함수를 k 번 반복하면 되지만 이 방법은 O(n^k), (n은 s , t 사이의 거리)로 느린 문제가 있다....

2018년 6월 6일 · 2 분 · 388 단어 · 김무훈