js에서 제공하는 여러 가지 for문에 대해 알아보자.
이것들을 능숙하게 사용할 수 있어야 할 것 같다.
for문만 쓰는 것보다는 fo -while, while, for in 등을 전부 사용할 수 있는게 도움이 될 듯.
1. basic
1. for문
기본적인 for문. 시작점, 범위, 값의 변화 방식을 차례로 주면 된다
for (let i = 0; i < 10; i++) {
console.log(i)
}
// 0, 1, 2, ..., 9
for ( let j = 10; j > 0; j = j - 2 ) {
console.log(j)
}
// 10 8 6 4 2
2. while 문
괄호 안의 조건이 참인 동안 반복문 안의 코드를 계속 수행한다.
let n = 0;
let x = 0;
// n이 3보다 작다면 계속 반복
// n이 3 이상이 되면 탈출
while (n < 3) {
n++;
x += n;
}
console.log(x);
알고리즘 문제를 풀면서 무한 루프를 도는거 대부분은 while문에서 나왔던 것 같다.
조건문이 계속 true라도 빠져나올 방법이 있도록 후술할 break 같은걸 집어넣어둬야 한다.
3. do - while 문
특정 조건이 참인 동안 반복문의 코드를 반복한다.
단, 조건문을 확인하기 전 코드 실행을 선행한다.
그 후, 조건을 검사하고 만족한다면 반복, 거짓이라면 빠져나온다.
(while은 조건의 만족 여부를 먼저 확인, do-while은 우선 실행 후, 조건 만족 여부를 확인)
let i = 0;
do {
i += 1;
console.log(i);
} while (i < 5);
// 1 2 3 4 5
// 0은 안나옴. 일단 문장을 실행을 하기 때문에 +1을 먼저하고 출력함
// 5는 나옴. 4에서 1을 올린 다음 그걸 출력하고 조건 만족 여부를 확인하기 때문
2. addon
1. label
반복문이 여러개 있을 경우, 특히 다중 반복문이 있을 때
각각의 반복문을 지정해 프로그램의 다른 곳에서 쉽게 식별할 수 있도록 이름을 붙여줄 수 있다.
단독으로 사용하는 경우는 별로 없고, brack나 continue와 함께 활용할 때가 많은 듯.
markLoop: for (let i = 0; i < 5; i++) {
console.log(i);
}
2. break
반복문을 빠져나올 때 사용한다. label을 사용하면 어던 반복문을 빠져나올지도 지정할 수 있다.
let a = [1, 2, 3, 4, 5];
for (let i = 0; i < a.length; i++) {
console.log(a[i]);
if (a[i] == 3) {
break;
}
} // 1, 2, 3
label과 함께 다음과 같이 사용할 수도 있다.
let a1 = 0;
let a2 = 0;
// 바깥 쪽 반복문을 outer로 label
outer: while (true) {
console.log("outer loop: " + a1);
a1 += 1;
a2 = 1;
// 안쪽 반복문을 inner로 label
inner: while (true) {
console.log("Inner loop : ", a2);
a2 += 1;
if (a2 === 4 && a1 === 4) {
// 바깥쪽 반복문을 빠져나감
break outer;
} else if (a2 === 4) {
// 안쪽 반복문만 빠져나감. 바깥쪽 루프를 속행
break;
}
}
}
3. continue
반복문에서 현재 반복을 생략하고 다음 반복으로 들어가기 위해 사용한다.
break가 반복문 전체를 빠져나오는 것이라면 continue는 현재 반복만을 종료함.
break와 마찬가지로 label을 활용할 수 있다.
let b1 = 0;
let b2 = 0;
while (b1 < 5) {
b1++;
// b1이 3이면 이 조건문 다음을 실행하지 않고
// 바로 다음 반복으로 들어감
if (b1 == 3) {
continue;
}
b2 += b1;
}
console.log(b2);
// b2 = 1 + 2 + 4 = 7
// b2가 3일땐 continue keyword를 만났을 때 해당 반복이 종료
// 다음 코드인 b2 += b1가 실행되지 않음
3. advanced
이걸 쓰는 내 기준에서 약간 advanced 한 것들..
iterable엔 배열만 있지 않다.
객체도 있고, map이나 set 같은 클래스들도 반복문을 적용할 수 있다.
1. for - in 문
객체의 열거 속성을 통해 지정된 변수를 반복한다.
객체의 value가 아닌, key를 이용해 property들에 접근한다.
let me = {
name: "lsj",
age: 30,
job: "developer",
};
const print_props = (obj) => {
// 각 obj의 property들을 key를 이용해 가져옴
for (let i in obj) {
// value는 obj[key] 처럼 써주면 된다.
console.log(`${i} = ${obj[i]}`);
}
};
print_props(me);
// name = lsj
// age = 30
// job = developer
배열에도 적용할 수 있는데, 이 경우 key대신 index를 사용하게 된다.
let arr1 = ["a", "b", "c", "d"];
print_props(arr1, "arr1");
// 0 = a
// 1 = b
// 2 = c
// 3 = d
2. for - of 문
iterable의 요소들 각각을 순회한다. array 뿐만 아닌 set 등의 클래스에도 사용 가능. 객체는 안된다.
let arr2 = [3, 5, 7];
for (let i of temp_set) {
console.log(i);
}
// 3, 5, 7
let temp_set = new Set([1, 2, 3]);
for (let i of temp_set) {
console.log(i);
}
// 1, 2, 3
let temp_map = new Map();
temp_map.set(1, "a");
temp_map.set(2, "b");
temp_map.set(3, "c");
for (let i of temp_map) {
console.log(i);
}
// [1, "a"], [2, "b"], [3, "c"]
'Algorithm' 카테고리의 다른 글
백준 7785 (nodejs) (0) | 2023.10.23 |
---|---|
백준 14425 (nodejs) (1) | 2023.10.23 |
Study - Array vs. Map/Set (0) | 2023.08.17 |
Study - Set (0) | 2023.08.17 |
Study - Map (0) | 2023.08.17 |