"생각하는 프로그래밍" 이란 책을 보는데 재미있는(또한 강력한) 내용이 있길래 잊어버리기 전에...
벡터(문자열) "abcdefgh"를 왼쪽으로 3번 rotate해서 "defghabd"로 만드는 방법은??
책에서 제시한 답은 이렇다.
let A = "abc"
let B = 'defgh"
그러면 문자열 AB를 순서바꾼 BA를 구하는것이 목적이다.
A를 반전한(반대로 읽은) 문자열을 A^ 이라 하자.
마찬가지로 B는 B^ 이다.
그러면
(A^B^)^ = (B^)^(A^)^ = BA
즉 ^ 연산만 있으면 다음과 같이 간단해 진다.
이것을 C style로 표현하면
str = "abcdefgh"
Reverse(0, i-1); /* str<-"cbadefgh"
Reverse(i, n-1); /* str<- "cbahgfed"
Reverse(0, n-1); /* str <- "defghabc"
(덧말) A, B를 행렬이라고 생각하면 이해가 빠를지도...
댓글 없음:
댓글 쓰기