문제로 풀어보는 알고리즘 0.3 생각해보기 풀이 : 1주차 – go 언어
By suapapa
도서출판 인사이트에서 “코딩인터뷰 완전 분석” 발간 기념 코딩 퀴즈 이벤트를
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 언어