트랙
/
Clojure
Clojure
/
연습 문제
/
새 관찰자
새 관찰자

새 관찰자

학습 연습 문제

소개

Clojure의 vector는 0개 이상의 값으로 이루어진 컬렉션이에요. 순차적이고 인덱스가 있으며 변경할 수 없죠. 즉, 한 번 vector를 만들면 수정할 수 없어요. vector를 다루는 함수는 새로운 vector를 반환하고, 원래 vector는 그대로 남아 있어요. vector 안의 값은 서로 다른 타입일 수 있어요. vector는 다음과 같이 정의할 수 있어요:

(def empty [])
(def single-value [5])
(def single-value-alternative (vector 5))
(def three-values [1 "a" "b"])

vector의 원소는 인덱스를 사용해 가져올 수 있어요. Clojure의 vector는 0부터 시작해요. 즉, 첫 번째 원소의 인덱스는 항상 0이에요:

(def numbers [2 3 5])
;; Read value from vector
(get numbers 2)
;;=> 5
;; Update value in vector
(assoc numbers 2 9)
;;=> [2 3 9]

원래 vector는 변경되지 않아요:

numbers
;;=> [2 3 5]

업데이트된 값을 기억해 두려면, 그 값을 계속 넘겨주거나 var에 담아 두어야 해요:

(def updated-numbers
  (assoc numbers 2 9))
(get updated-numbers 2)
;;=> 9

지침

지난 7일 동안 정원에 몇 마리의 새가 찾아왔는지 기록하는 열정적인 새 관찰자예요.

정원에 찾아온 새의 수를 다루는 여섯 개의 과제가 있어요.

1. 지난주 기록이 어땠는지 확인해요

비교를 위해 지난주 기록을 항상 가까이에 두는데, 그 기록은 0, 2, 5, 3, 7, 8, 4였어요. 지난주 기록을 담은 벡터를 만들어 보세요:

last-week
;;=> [0 2 5 3 7 8 4]

2. 오늘 몇 마리의 새가 찾아왔는지 확인해요

today 함수를 구현해서 오늘 정원에 찾아온 새의 수를 반환해 보세요. 새의 수는 날짜 순서대로 정렬되어 있고, 첫 번째 원소는 가장 오래된 날의 수, 마지막 원소는 오늘의 수예요.

(def birds-per-day [2 5 0 7 4 1])
(today birds-per-day)
;;=> 1

3. 오늘의 수를 하나 늘려요

inc-bird 함수를 구현해서 오늘의 수를 하나 늘려 보세요:

(inc-bird birds-per-day)
;;=> [2 5 0 7 4 2]

4. 새가 찾아오지 않은 날이 있었는지 확인해요

day-without-birds? 조건 판별 함수를 구현해 보세요. 정원에 새가 한 마리도 찾아오지 않은 날이 있었다면 true를, 그렇지 않으면 false를 반환해요:

(day-without-birds? birds-per-day)
;;=> true

5. 처음 며칠 동안 찾아온 새의 수를 계산해요

n-days-count 함수를 구현해 보세요. 이 함수는 주가 시작된 이후 정원에 찾아온 새의 수를 반환하는데, 세는 범위를 주가 시작된 날부터 지정한 일수까지만으로 제한해요.

(n-days-count birds-per-day 4)
;;=> 14

6. 바쁜 날의 수를 계산해요

어떤 날은 다른 날보다 더 바빠요. 바쁜 날은 정원에 다섯 마리 이상의 새가 찾아온 날이에요. busy-days 함수를 구현해서 바쁜 날의 수를 반환해 보세요:

(busy-days birds-per-day)
;;=> 2

7. 홀수 주인지 확인해요

지난 한 해 동안, 어떤 주들은 새가 한 마리 찾아오는 날과 한 마리도 찾아오지 않는 날이 번갈아 나타나는, 똑같은 홀수 패턴을 보인다는 걸 알게 됐어요. odd-week? 함수를 구현해서 이번 주의 새 수 패턴이 그 홀수 패턴과 일치하면 true를 반환해 보세요:

(odd-week? [1 0 1 0 1 0 1])
;;=> true
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Clojure Exercism

새 관찰자 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Clojure 트랙을 개념 12개연습 문제 105개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.