Coding Test/Codility

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

chamroro 2025. 3. 1. 21:44

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

๋ฐ˜์‘ํ˜•