어떤 언어든 프로그래밍을 처음 배울 때 조건문, 반복문은 배운다.
모든 프로그래밍의 기초이기 때문이다.
조건문까지는 어느 정도 이해가 되지만, 반복문으로 들어가면 머리가 슬슬 깨지기 시작한다.
반복문 너란 녀석은 도대체 뭐길래?(본문은 JS로 한정지어서 말합니다)
반복문은 말 그대로 반복을 시켜주는 문장을 의미한다.
가령, 자바스크립트에서 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까지 직접 플러스를 일일이 안써도 계산이 되쥬?
혹시 반복문을 어려워 하는 사람들을 위하여 나름의 공식으로 만들어보았다.
사실 이게 전부이다.
반복문이 어려운 이유는 반복되는 것을 한번에 일반화 하는 것이 까다롭기 때문일 것이다.
그러면 위의 사례를 위 공식에 적용하면?
for (let i=0;i<=100;i++) {
sum = sum + i
}
console.log(sum); // 5050
이런 형식이 될 것이다.
4. 결과변수를 출력하면 5050가 정상적으로 나올 것이다.
이쯤에서 반복문이 여러번 반복되는 경우도 확장을 시킬 수가 있다.
예를 들어서 2부터 num까지 소수(Prime Number: 1과 자신으로밖에 나누어떨어지지 않는 숫자)리스트를 호출하는 함수 'listPrime(num)'을 만든다고 하자.
이때도 2번에서 적용한 공식이 적용된다.
for (let i=3;i<=num;i+=2) {
for (let j=1;j<=num;j+=2) {
}
}
이제 for문의 바깥쪽 틀은 완성이 되었으니 반복할 내용을 작성해야된다.
우리가 해야될 것은 다음과 같다.
- 나눠서 나누어 떨어지는 순간 count가 올라간다.
- count가 2가 되는 순간, 안쪽 반복문을 강제종료한다.
- 다 나누었는데 count가 2이면 result에 숫자를 덧붙인다.
- 바깥쪽 카운트가 한바퀴 돌았으면 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)
}
}