Algorithm

[nodejs] for

Sila 2023. 8. 22. 13:35

 

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