새 관찰자

새 관찰자

학습 연습 문제

소개

for문은 어떤 로직을 반복해서 실행할 때 가장 흔히 쓰이는 문 중 하나예요. JavaScript에서 for문은 for 키워드, 소괄호로 감싼 헤더, 그리고 중괄호로 감싼 루프의 _본문_이 들어 있는 코드 블록으로 이루어져 있어요.

for (initialization; condition; step) {
  // code that is executed repeatedly as long as the condition is true
}

초기화 부분은 보통 카운터 변수를 준비하고, 조건은 루프를 계속할지 멈출지 확인하며, 단계는 반복이 끝날 때마다 카운터를 증가시켜요. 헤더의 각 부분은 세미콜론으로 구분해요.

const list = ['a', 'b', 'c'];
for (let i = 0; i < list.length; i++) {
  // code that should be executed for each item list[i]
}

단계를 정의할 때는 위 예시처럼 JavaScript의 증가 연산자나 감소 연산자를 쓰는 경우가 많아요. 이 연산자들은 변수 값을 그 자리에서 바꿔요. ++는 숫자에 1을 더하고, --는 숫자에서 1을 빼요.

let i = 3;
i++;
// i is now 4

let j = 0;
j--;
// j is now -1

지침

정원에 새가 몇 마리 찾아왔는지 기록하는 열렬한 탐조가예요. 보통은 공책에 하나씩 표시를 하면서 새를 세지만, 이 데이터를 더 잘 다뤄 보고 싶어요. 지난 몇 주 동안 공책에 적어 둔 날짜별 새 개수는 이미 디지털로 옮겨 놓았어요.

이제 세어 온 새의 총 마릿수를 구하고, 특정 주의 새 개수를 계산하고, 집계 실수 하나를 바로잡으려고 해요.

Note

연습 삼아, 아래 과제를 각각 for문으로 풀어 봐요.

1. 지금까지 세어 온 새의 총 마릿수 구하기

먼저 데이터를 전체적으로 살펴보는 것부터 시작해 봐요. 기록을 시작한 뒤로 모두 몇 마리의 새를 세었는지 알아내요.

날짜별 새 개수를 담은 유사 배열 객체를 받는 totalBirdCount 함수를 구현해요. 이 함수는 세어 온 새의 총 마릿수를 반환해야 해요.

birdsPerDay = [2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1];
totalBirdCount(birdsPerDay);
// => 34

2. 특정 주에 찾아온 새의 수 계산하기

새 개수에 대한 전반적인 감을 잡았으니, 이제 더 세밀한 분석을 해 보고 싶어요.

날짜별 새 개수를 담은 유사 배열 객체와 주 번호를 받는 birdsInWeek 함수를 구현해요. 이 함수는 해당 주에 세어 온 새의 총 마릿수를 반환해요. 주는 항상 빠짐없이 기록된다고 가정해도 돼요.

birdsPerDay = [2, 5, 0, 7, 4, 1, 3, 0, 2, 5, 0, 1, 3, 1];
birdsInWeek(birdsPerDay, 2);
// => 12

3. 집계 실수 바로잡기

새를 기록하는 내내, 정원 멀리 구석에 새 한 마리가 숨어 있었다는 걸 깨달았어요. 이 새는 이틀에 한 번씩 항상 정원에 머물렀다는 걸 알아냈어요. 그 사이에 어디에 있었는지는 정확히 모르지만, 분명 정원에는 없었어요. 탐조가의 직감은 목록에 기록한 첫날에 이 새가 정원에 있었다고도 말해 줘요.

이 새로운 정보를 바탕으로, 날짜별로 센 새 개수를 담은 유사 배열 객체를 인자로 받는 fixBirdCountLog 함수를 작성해요. 이 함수는 주어진 배열을 수정해서 집계 실수를 바로잡아야 해요.

birdsPerDay = [2, 5, 0, 7, 4, 1];
fixBirdCountLog(birdsPerDay);
// => [3, 5, 1, 7, 5, 1]
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
JavaScript Exercism

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

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