TIL 4

모모·2021년 10월 8일
0

TIL

목록 보기
4/28

오늘의 학습


반복문(loop)

왜 배울까

어떤 일은 사람에게 쉽고, 어떤 일은 컴퓨터에게 쉽다.
사람은 냉장고에서 주스를 꺼내라는 명령을 한 번에 수행할 수 있지만 컴퓨터는 그렇지 않다.
대신 컴퓨터는 단순 계산과 반복에 뛰어나다. 단순한 반복을 효율적이고 간결하게 처리하기 위해 반복문이 존재한다.

어디에 쓸까

같거나, 비슷한, 또는 일정 규칙으로 반복되는 코드를 여러 번 실행시켜야 할 때 사용한다.
구구단은 1단부터 9단까지 1씩 증가하면서 매번 1에서 9를 곱해줘야 한다.
ctrl + c, v를 사용하더라도 일일이 숫자를 고쳐줘야 한다. 9단이 아니라 더 많은 양이면 더욱 힘들 것이다. 반복문에 반복되는 로직만 입력해주면 방대한 양의 task를 처리할 수 있다.

어떻게 쓸까

반복문은 세 부분으로 구성된다.
1. 변수값을 초기화하는 부분
2. 반복 실행되는 부분(증감문)
3. 반복을 계속 진행할 것인지 확인하는 반복조건 부분(조건식)
조건(boolean)이 true인 동안에 false가 될 때까지 반복해서 실행한다.

기본 구문인 while문과 for문의 구성을 살펴보자.

while문

let sum = 1;
let n = 2;         // 초기화

while(n <= 4) {    // 조건식
 	sum = sum + n;
	n = n + 1;      // 증감문
}
console.log(sum); // 10

for문

let sum = 1;
for(let n = 2; n <= 4; n = n + 1) { //초기화, 조건식, 증감문
	sum = sum + n;
}
console.log(sum); // 10

두 코드 모두 같은 기능을 수행하지만 구성에서 조금 차이를 보인다.
for문은 초기화, 조건식, 증감문을 괄호에 한 번에 담기 때문에 가독성 측면의 이점이 있다.
가독성 향상은 곧 문제발생 여지의 감소를 의미하기 때문에 while보다 for이 더 많이 사용된다.

추가 학습

i++과 ++i

이 둘은 서로 다르다. 각각의 case별로 구문을 한 번 실행했을 때 i의 값은 다음과 같다.

for(i = 0; i < 3; i++); // 0
for(i = 0; i < 3; ++i); // 1

i++는 기존의 값을 사용하고 i값을 증가시키지만,
++i는 i의 값을 증가시키고 사용하기 때문에 발생하는 차이다.
i = i + 1 대신 i++를 사용하며, ++i보다 i++의 형태로 더 많이 쓰인다.

반복문의 제어: break, continue

반복문을 언제까지 반복할 것인지 제어하는 수단이다.
break와 continue의 쓰임은 다음과 같다.

break
반복문을 빠져나온다.

for (i = 0; i < a.length; i++) { // i=0, a의 길이보다 작으면 반복, i는 1씩 증가
  if (a[i] === theValue) {  // 만약 a[i]와 theValue가 일치하면
    break;  // 반복문에서 빠져나온다
  }
}

continue
그 순간에만 종료시키고 반복문은 계속 실행된다.

n = 0;
for (i = 0; i < 5; i++) { // i=0, i가 5보다 작으면 반복, i는 1씩 증가
  if (i === 3) { // i가 3과 일치하면
    continue;  // 그 순간만 종료시킨다 (반복문은 계속된다)
  }
  n += i; // n은 1, 3, 7, 12를 취함. 3은 continue부분에서 종료되어 증가하지 않았음
}

오늘의 생각

조금은 걱정했던 반복문... 기우가 아니었듯, 처음으로 시간안에 문제를 다 못풀었다. 크루님 말로는 시간 안에 못푸는게 당연하다지만, 약 5문제를 남겨둔 상태여서 조금은 아쉽다.

고무적인 것은 계속 문제를 보고, 풀다 보니 조금 눈이 트였다는 것이다.
문제의 요구사항을 조금 더 빨리 파악할 수 있게 되었고, 문제를 풀기 위해 어떻게 해야 할 지 조금 더 빨리 생각할 수 있게 되었다.

아직 갈길이 멀지만, 내가 생각한대로 작성한 코드가 쉽지 않은 반복문에서 제대로 작동이 되니 조금 자신이 붙는다. 그리고 문제 풀이에 더욱 매진해서 앞으로 풀 문제도 더 잘 풀고싶은 욕심도 난다.

0개의 댓글