book

[BOOK] 개미 수열을 푸는 10가지 방법

[BOOK] 개미 수열을 푸는 10가지 방법 – 한주영 지음

[BOOK] 개미 수열을 푸는 10가지 방법
[BOOK] 개미 수열을 푸는 10가지 방법

부제: “알아두면 피와 살이 될 프로그래밍 개념 10 가지”

팀 개발자들과 코틀린(Kotlin) 스터디를 진행중인데 한 팀원이 코루틴(Coroutine)에 대한 연습문제로 ‘개미수열’을 출제하면서 책을 접하게 되었다. ‘개미수열’은 베르나르 베르베르의 소설에 나오는 수열로 ‘look and say sequence’로 구글링하면 많은 정보를 얻을 수 있다. 책에 대한 소개는 저자의 블로그를 통해서 확인이 가능하다.

책에는 기본적인 프로그래밍 개념으로 시작으로 점차 고수준의 프로그래밍 개념을 추가해가면서 ‘개미수열’ 문제를 해결한다. 또한 C, Go, Haskell, Java, JavaScript, Scala 등의 다양한 언어로 ‘개미수열’을 즐길 수 있다. 처음 프로그래밍을 공부하는 분에게는 다소 어려울 수 있고, 한가지 언어는 알고 있고 함수형 언어에 관심이 있는 분이라면 빠르게 읽을 수 있을 것이다. 그리고 한 번 풀어보면 재미있다!


Kotlin의 Coroutine으로 풀어본 내 개미수열 코드를 공개해 둔다.
(아직 Kotlin에 익숙하지 않아서 저 정도만….)


fun ant2(count: Int) {
fun lookAndSay(sequence: Sequence<String>): Sequence<String> {
return buildSequence {
var head = '1'
var count = 0
sequence.forEach {
for (c in it) {
if (c != head) {
yield("$head$count")
count = 1
head = c
} else {
count++
}
}
}
yield("$head$count")
}
}
var sequence: Sequence<String> = sequenceOf("1")
val antSeq = buildSequence {
while (true) {
yield(sequence)
sequence = lookAndSay(sequence)
}
}
antSeq.take(count).last().forEach(::print)
println()
}

1 comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: