[JavaScript] 반복문을 정복해보자

Jeongwon Seo·2021년 7월 24일
0

JS/Node

목록 보기
1/16

0. 인트로

어떤 언어든 프로그래밍을 처음 배울 때 조건문, 반복문은 배운다.
모든 프로그래밍의 기초이기 때문이다.
조건문까지는 어느 정도 이해가 되지만, 반복문으로 들어가면 머리가 슬슬 깨지기 시작한다.
반복문 너란 녀석은 도대체 뭐길래?(본문은 JS로 한정지어서 말합니다)

1. 반복문 왜쓰니?

반복문은 말 그대로 반복을 시켜주는 문장을 의미한다.
가령, 자바스크립트에서 1부터 100까지 더한 값을 콘솔에 찍고싶다고 한다.
만약에 반복문을 안쓴다면?
아래와 같이 하드코딩을 하는 뻘짓을 해야 된다.
치는 것도 힘들어요.

console.log(1+2+3+4+5+6+7+8+9+10+11+12+ // 헥헥헥...

하지만 반복문을 사용한다면 간단해진다.

let sum = 0; 
for (let i=0;i<=100;i++) {
    sum = sum + i
	}
console.log(sum); // 5050

1부터 100까지 직접 플러스를 일일이 안써도 계산이 되쥬?

2. 반복문 공식(?)

혹시 반복문을 어려워 하는 사람들을 위하여 나름의 공식으로 만들어보았다.

  1. 결과를 담을 변수(result) 선언 및 값의 초기화
  2. 반복되는 것을 파악한 뒤 초기값, 범위, 증감문, 반복 내용 작성
  3. for문 또는 while문 형식에 맞게 코딩 작성
  4. 결과 변수 출력.

사실 이게 전부이다.
반복문이 어려운 이유는 반복되는 것을 한번에 일반화 하는 것이 까다롭기 때문일 것이다.
그러면 위의 사례를 위 공식에 적용하면?

  1. 결과를 담을 변수를 sum으로 선언하고,
    덧셈의 계산을 하기 때문에 0으로 초기화한다.
    (만약 문자를 더한다면 빈 스트링으로 할당하는 식)
  2. 덧셈을 반복적으로 해주어야 된다.
    그런데 반복적으로 해주는 작업(덧셈)을 하려는 값이
    1, 2, 3, ... , 100으로 1씩 증가한다.
    따라서 초기값은 1로 지정하며, 증감문은 1씩 더한다고 지정한다. (만약 함수작성을 통한 일반화라면 0부터 시작해도 무방하다).
    그리고 더하는 값은 1부터 100이니까 100이 될 때 까지(즉, 100보다 작거나 같은 경우까지) 반복을 시킨다고 명령을 시킨다. 그리고 계속 더하는 것이기 때문에
    결과값에 반복되는 값을 더하라는 내용을 반복시키면 된다.
  3. for문이라면 2번 내용에 따라서
for (let i=0;i<=100;i++) {
    sum = sum + i
	}
console.log(sum); // 5050

이런 형식이 될 것이다.
4. 결과변수를 출력하면 5050가 정상적으로 나올 것이다.

3. 이중 반복문

이쯤에서 반복문이 여러번 반복되는 경우도 확장을 시킬 수가 있다.
예를 들어서 2부터 num까지 소수(Prime Number: 1과 자신으로밖에 나누어떨어지지 않는 숫자)리스트를 호출하는 함수 'listPrime(num)'을 만든다고 하자.
이때도 2번에서 적용한 공식이 적용된다.

  1. 결과를 담을 변수 result를 선언하고
    문자열로 값을 출력할 것인바, 빈 string으로 할당한다.
  2. 반복이 되어야 될 것은 두 가지이다.
    일단 2와 3이상의 홀수의 피제수(나눔을 당하는 값)와
    나눌 값(홀수)이 바로 그것이다.
    예를 들자면, 100까지의 소수 리스트를 만들고 싶다면,
    2, 3, 5, ... , 99까지 가는 도중에 숫자 하나하나마다
    1, 3, 5, ... 를 나눠주어야 된다.
    따라서 먼저 피제수를 바깥쪽 반복문에 써주고,
    나눠줄 값을 안쪽 반복문에 써주어야 된다.
    그리고 초기값은 바깥쪽은 3, 안쪽은 1로 시작해야 될 것이다. 그리고 나눌 숫자와 소수인지 판별할 숫자 모두 홀수이기에
    2씩 더한다고 해야 된다.
    아래는 for문 괄호 안의 내용이다.
for (let i=3;i<=num;i+=2) {
      for (let j=1;j<=num;j+=2) {
      }
}
  1. 이제 for문의 바깥쪽 틀은 완성이 되었으니 반복할 내용을 작성해야된다.
    우리가 해야될 것은 다음과 같다.

    1. 나눠서 나누어 떨어지는 순간 count가 올라간다.
    2. count가 2가 되는 순간, 안쪽 반복문을 강제종료한다.
    3. 다 나누었는데 count가 2이면 result에 숫자를 덧붙인다.
    4. 바깥쪽 카운트가 한바퀴 돌았으면 count를 0으로 초기화한다.(이거 매우중요중요!)

    이것을 코드로 구현하면 다음과 같다.

    function listPrimes(num) {
     if (num === 2) {
       return '2'
     } else if (num > 2) {
       let result = '2-'
       let count = 0;
       for (let i=3;i<=num;i+=2) {
         for (let j=1;j<=num;j+=2) {
           if (i % j === 0) {
             count++
           }
           if (count === 3) {
             break;
           }
         }
         if (count === 2) {
           result = result + i + '-'
         }
         count = 0;
       }
       return result.slice(0,result.length-1)
     }
    }

profile
피트는 구덩이라는 뜻이다 구덩이를 파다보면 좋은 것이 나오겠지 (아싸 벡스룬)

0개의 댓글