1. ๋ฐ˜๋ณต (Iterations) Codility Lesson ํ•œ๊ตญ์–ด ์ •๋ฆฌ๋ณธ (JavaScript ver.)

    Codility ์—์„œ ์ œ๊ณตํ•˜๋Š” lesson์˜ open material ์„ ๋ชจ๋‘ ํ•œ๊ตญ์–ด๋กœ ์ •๋ฆฌํ•˜๋Š” ๋™์‹œ์—, ๋‚˜๋Š” JS ๋กœ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ฅผ ๋ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠœํ† ๋ฆฌ์–ผ ์† ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ JS ์ฝ”๋“œ๋กœ ๋ฐ”๊ฟ” ์ •๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
    100% ์™„๋ฒฝํ•œ ๋ฒˆ์—ญ๋ณธ์ด ์•„๋‹Œ ํ•„์ž์˜ ์ž…๋ง›๋Œ€๋กœ (๋ฒผ๋ฝ์น˜๊ธฐ์šฉ )ใ…Ž ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ด๋‹ค.

    lesson 17๊นŒ์ง€ ๋‹ค ๊ณต๋ถ€ํ•˜๊ณ  ๋ฌธ์ œ ํ’€๊ณ  ๋ธ”๋กœ๊ทธ์— ํฌ์ŠคํŒ…๊นŒ์ง€ ํ•˜๋Š”๊ฒŒ ๋ชฉํ‘œ!

    ๋ฐ˜๋ณต๋ฌธ (Iterations)

    ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋ฐ˜๋ณต(iterating) ์ด๋ž€ ํ”„๋กœ๊ทธ๋žจ์˜ ์ผ๋ถ€๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด ์žฅ์—์„œ๋Š” ๋ฐ˜๋ณต์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ตฌ์กฐ์ธ for๋ฌธ๊ณผ while๋ฌธ์„ ๋‹ค๋ฃฌ๋‹ค.


    1.1. For ๋ฃจํ”„ (For Loops)

    ์–ด๋–ค ์—ฐ์‚ฐ์„ ์ผ์ • ํšŸ์ˆ˜๋งŒํผ ๋ฐ˜๋ณตํ•˜๊ฑฐ๋‚˜, ํŠน์ • ์ปฌ๋ ‰์…˜์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ๋ฐ˜๋ณตํ•˜๋ ค๋ฉด for ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•˜๋‹ค.

    For ๋ฃจํ”„ ๋ฌธ๋ฒ•

    for (let some_variable of range_of_values) {
        // loop_body
    }

    for ๋ฃจํ”„๋Š” range_of_values ๋‚ด์˜ ๊ฐ ๊ฐ’์— ๋Œ€ํ•ด loop_body๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ, ํ˜„์žฌ ๊ฐ’์€ some_variable์— ํ• ๋‹น๋œ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด, 0๋ถ€ํ„ฐ 99๊นŒ์ง€์˜ ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฃจํ”„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    JavaScript ์ฝ”๋“œ:

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

    ์‹คํ–‰ ๊ฒฐ๊ณผ:

    0
    1
    2
    ...
    99

    ์˜ˆ์ œ: ํŒฉํ† ๋ฆฌ์–ผ ๊ณ„์‚ฐ

    ์–‘์˜ ์ •์ˆ˜ n์— ๋Œ€ํ•ด ํŒฉํ† ๋ฆฌ์–ผ์„ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด๋ณด์ž.

    JavaScript ์ฝ”๋“œ:

    let n = 5; // ์˜ˆ์ œ ์ž…๋ ฅ๊ฐ’
    let factorial = 1;
    for (let i = 1; i <= n; i++) {
        factorial *= i;
    }
    console.log(factorial);

    ์‹คํ–‰ ๊ฒฐ๊ณผ (n = 5):

    120

    ์˜ˆ์ œ: ๋ณ„ํ‘œ(asterisk) ์‚ผ๊ฐํ˜• ์ถœ๋ ฅ

    n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ณ„ ์‚ผ๊ฐํ˜•์„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์ž.

    *
    * *
    * * *
    * * * *

    JavaScript ์ฝ”๋“œ:

    let n = 4; // ์˜ˆ์ œ ์ž…๋ ฅ๊ฐ’
    for (let i = 1; i <= n; i++) {
        console.log('* '.repeat(i).trim());
    }

    ์‹คํ–‰ ๊ฒฐ๊ณผ (n = 4):

    *
    * *
    * * *
    * * * *

    1.2. While ๋ฃจํ”„ (While Loops)

    for ๋ฃจํ”„๋Š” ๋ฐ˜๋ณต ํšŸ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๋ช‡ ๋ฒˆ ๋ฐ˜๋ณตํ• ์ง€ ๋ฏธ๋ฆฌ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ while ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

    While ๋ฃจํ”„ ๋ฌธ๋ฒ•

    while (some_condition) {
        // loop_body
    }

    ๋ฐ˜๋ณต์ด ์‹œ์ž‘๋  ๋•Œ๋งˆ๋‹ค some_condition์ด ํ‰๊ฐ€๋˜๋ฉฐ, ๊ฐ’์ด true์ด๋ฉด loop_body๊ฐ€ ์‹คํ–‰๋œ๋‹ค. ๊ฐ’์ด false๊ฐ€ ๋˜๋ฉด ๋ฃจํ”„๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค.

    ์˜ˆ์ œ: ์ˆซ์ž์˜ ์ž๋ฆฟ์ˆ˜ ์„ธ๊ธฐ

    ์ฃผ์–ด์ง„ ์ •์ˆ˜ n์˜ ์ž๋ฆฟ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด๋ณด์ž.

    JavaScript ์ฝ”๋“œ:

    let n = 12345; // ์˜ˆ์ œ ์ž…๋ ฅ๊ฐ’
    let result = 0;
    while (n > 0) {
        n = Math.floor(n / 10);
        result++;
    }
    console.log(result);

    ์‹คํ–‰ ๊ฒฐ๊ณผ (n = 12345):

    5

    ์˜ˆ์ œ: ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด

    ์ฃผ์–ด์ง„ n ์ดํ•˜์˜ ๋ชจ๋“  ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์ž.

    JavaScript ์ฝ”๋“œ:

    let n = 20; // ์˜ˆ์ œ ์ž…๋ ฅ๊ฐ’
    let a = 0, b = 1;
    while (a <= n) {
        console.log(a);
        let c = a + b;
        a = b;
        b = c;
    }

    ์‹คํ–‰ ๊ฒฐ๊ณผ (n = 20):

    0
    1
    1
    2
    3
    5
    8
    13

    1.3. ์ปฌ๋ ‰์…˜ ๋ฐ˜๋ณต (Looping Over Collections)

    ์ง€๊ธˆ๊นŒ์ง€ ์ •์ˆ˜๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด์•˜๋‹ค. ํ•˜์ง€๋งŒ ๋ฆฌ์ŠคํŠธ, ์…‹(set), ๋”•์…”๋„ˆ๋ฆฌ(dictionary)์™€ ๊ฐ™์€ ์ปฌ๋ ‰์…˜์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

    ๋ฆฌ์ŠคํŠธ ๋ฐ˜๋ณต (Looping Over Lists)

    JavaScript ์ฝ”๋“œ:

    let days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
    for (let day of days) {
        console.log(day);
    }

    ์‹คํ–‰ ๊ฒฐ๊ณผ:

    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    Sunday

    ์…‹(Set) ๋ฐ˜๋ณต

    ์…‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์š”์†Œ๋“ค์ด ์ €์žฅ๋œ ์ˆœ์„œ์™€ ๊ด€๊ณ„์—†์ด ๋ฐ˜๋ณต๋œ๋‹ค.

    JavaScript ์ฝ”๋“œ:

    let days = new Set(['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']);
    for (let day of days) {
        console.log(day);
    }

    ๋”•์…”๋„ˆ๋ฆฌ(Dictionary) ๋ฐ˜๋ณต

    JavaScript ์ฝ”๋“œ:

    let days = {
        'mon': 'Monday',
        'tue': 'Tuesday',
        'wed': 'Wednesday',
        'thu': 'Thursday',
        'fri': 'Friday',
        'sat': 'Saturday',
        'sun': 'Sunday'
    };
    
    for (let key in days) {
        console.log(`${key} stands for ${days[key]}`);
    }

    ์‹คํ–‰ ๊ฒฐ๊ณผ:

    mon stands for Monday
    tue stands for Tuesday
    wed stands for Wednesday
    thu stands for Thursday
    fri stands for Friday
    sat stands for Saturday
    sun stands for Sunday

    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€