도서출판 인사이트에서 “코딩인터뷰 완전 분석” 발간 기념 코딩 퀴즈 이벤트를
go 언어를 익히고 있는 김에 go 언어로 풀어봤습니다.

코딩인터뷰 완전분석

꽤 간단한 문제라 큰 부담 없이 풀어볼 수 있었습니다.
3 주에 걸쳐 진행되며 전체 문제 내용은 다음 링크에 있습니다:

간단히 요약해 보면, 배열 `a`의 `a[s : t+1]` 을 `k` 만큼 회전하는 문제 입니다.

슬라이스를 써서 배열의 중간부터가 아닌 돌릴 부분이 처음 시작하게 하고,
왼쪽으로 돌리게 수정해 보니 좀 더 간단하게 작성할 수 있었습니다.

func rotate(a []int, s, t, k int) {
	// resliced window for rotating area
	w := a[s : t+1]
	n := len(w)

	// in case 0 > k or k > rl
	k = k % n
	if 0 > k {
		k += n
	}

	if k == 0 {
		return
	}

	// left rotate is simpler then right
	k = n - k

	var i, c int
	for ; c < n; i++ {
		iTo := i
		iFrom := (iTo + k) % n
		tmp := w[iTo]
		for iFrom != i {
			w[iTo] = w[iFrom]
			c += 1
			iTo = iFrom
			iFrom = (iTo + k) % n
		}
		w[iTo] = tmp
		c += 1
	}
}

제가 푼 전체 풀이 코드는 다음 gist 링크에 있습니다. - 문제로 풀어보는 알고리즘 0.3 생각해보기 풀이 - go 언어