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

새 관찰자

학습 연습 문제

소개

일반적인 문법

for문은 어떤 로직을 반복해서 실행할 때 가장 흔히 쓰이는 문 중 하나예요. Go에서는 for 키워드, 헤더, 그리고 중괄호로 감싼 루프 본문을 담는 코드 블록으로 이루어져 있어요. 헤더는 세미콜론 ;으로 구분된 세 가지 요소로 이루어져요. 바로 init, condition, post예요.

for init; condition; post {
  // loop body - code that is executed repeatedly as long as the condition is true
}
  • init 요소는 루프가 시작되기 전에 딱 한 번만 실행되는 코드예요.
  • condition 요소는 불리언으로 평가되는 표현식이어야 하고, 루프를 언제 멈출지 결정해요. 루프 안의 코드는 이 조건이 true로 평가되는 동안 실행돼요. 이 표현식이 false로 평가되는 순간, 루프는 더 이상 반복되지 않아요.
  • post 요소는 각 반복이 끝날 때 실행되는 코드예요.

참고: 다른 언어와 달리, 헤더의 세 요소를 감싸는 괄호 ()가 없어요. 오히려 이런 괄호를 넣으면 컴파일 오류가 발생해요. 그렇지만 루프 본문을 감싸는 중괄호 { }는 항상 필요해요.

for문 예제

init 요소는 보통 카운터 변수를 준비하고, condition은 루프를 계속할지 멈출지 확인하며, post는 보통 매 반복이 끝날 때 카운터를 증가시켜요.

for i := 1; i < 10; i++ {
  fmt.Println(i)
}

이 루프는 1부터 9까지의 숫자를 출력해요(9도 포함해서요). 반복의 간격을 정할 때는 위 예제처럼 증가문이나 감소문을 사용하는 경우가 많아요.

지침

여러분은 정원에 찾아온 새가 몇 마리인지 기록하는 열렬한 새 관찰자예요. 보통은 공책에 하나씩 표시하며 새의 수를 세지만, 데이터를 더 잘 다루기 위해 지난 몇 주 동안의 새 개수를 디지털화했어요.

1. 지금까지 센 새의 총 개수를 구해요

먼저 전체적인 그림을 보면서 데이터 분석을 시작해 봐요. 기록을 시작한 이후로 총 몇 마리의 새를 셌는지 알아봐요.

하루에 센 새의 수가 담긴 int 슬라이스를 받는 TotalBirdCount 함수를 구현해요. 이 함수는 센 새의 총 개수를 반환해야 해요.

birdsPerDay := []int{2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1}
TotalBirdCount(birdsPerDay)
// => 34

2. 특정 주에 찾아온 새의 수를 계산해요

새 개수 데이터에 어느 정도 감이 잡혔으니, 이제 더 세밀하게 분석해 보고 싶어요.

하루에 센 새의 수가 담긴 슬라이스와 주차를 받는 BirdsInWeek 함수를 구현해요.

이 함수는 그 주에 센 새의 총 개수를 반환해요. 주는 항상 완전히 기록되어 있다고 가정해도 돼요.

birdsPerDay := []int{2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1}
BirdsInWeek(birdsPerDay, 2)
// => 12

3. 세는 실수를 바로잡아요

새를 기록하던 내내, 정원 멀리 구석에 숨어 있던 새가 한 마리 있었다는 걸 깨달았어요.

그 새는 이틀에 한 번씩 항상 정원에 머물렀다는 걸 알아냈어요.

그 사이에 그 새가 어디에 있었는지는 정확히 모르지만, 분명히 정원에는 없었어요.

새 관찰자의 직감은 그 새가 목록에서 처음 기록한 날에도 정원에 있었다고 알려줘요.

이 새로운 정보를 바탕으로, 하루에 센 새의 수가 담긴 슬라이스를 인자로 받아 세는 실수를 바로잡은 슬라이스를 반환하는 FixBirdCountLog 함수를 작성해요.

birdsPerDay := []int{2, 5, 0, 7, 4, 1}
FixBirdCountLog(birdsPerDay)
// => [3 5 1 7 5 1]
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Go Exercism

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

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