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
๋๊ธ