이벤트 1주차 첫 번째 문제를 풀어 봅니다.
배열 arr[]과 위치 s, t가 있을 때
- arr[s], arr[s+1], … , arr[t-1]을 오른쪽으로 한 칸씩 이동하고,
- arr[t]는 arr[s]로 복사하는 것을 ’1만큼 오른쪽으로 회전시켰다’고 한다.
예를 들어 길이가 8인 배열에서 s=2, t=6이면 다음 그림처럼 바뀐다.
길이가 n인 배열의 위치는 0, 1, 2, … , n-1이다.
###문제
k를 인자로 받아서 k만큼 오른쪽으로 회전시키는 함수를 작성하라.
단, 1만큼 오른쪽으로 이동시키는 과정을 k번 반복해서는 안 된다.
###조건
- 작성하는 언어에는 제한이 없습니다.
- 답안으로 작성하신 글 제목에는 ‘문제로 풀어보는 알고리즘 0.3 생각해보기 풀이’라는 문장이 들어가야 합니다. (저희 블로그에도 트랙백을 걸어주세요.)
여러가지 방법이 떠올랐지만 두 가지만 구현했습니다.
###BlockCopyArrayRotator
배열의 첫 위치가 이동할 위치를 계산한 수 블럭 카피를 해서 새 배열을 만든다.
###IterativeCopyArrayRotator
배열을 순차적으로 하나씩 새 위치로 복사한다.
으엑! 댓글을 수정할 수가 없...;;;