๋ฒ์ญ์: ๋น์ ์ ์ํ ๊ธฐ์ฌ๋ฅผ ๊ฒ์ํ์ต๋๋ค
๊ธฐ์ ํ์ฌ์ ์ธํฐ๋ทฐ๋ ์ค๋ซ๋์ ํ์ ๊ฐ ๋์ด ์์ต๋๋ค. ์ด๋ ๋๋ผ์ด ์ผ์ด ์๋๋๋ค. ์ฑ๊ณต์ ์ผ๋ก ์ธํฐ๋ทฐ๋ฅผ ํต๊ณผํ๋ฉด ์ข์ ์ง์ ์ ์ป์ ์ ์๋ ๊ธฐํ๊ฐ ์ ๊ณต๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ทธ๋ฆฌ ๊ฐ๋จํ์ง ์์ต๋๋ค.
๋ํ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ด๋ฌํ ์์
์ ๋๋ถ๋ถ์ ์ง์์๊ฐ ์ํํ ์์
๊ณผ ๊ด๋ จ์ด ์์ง๋ง ์ฌ์ ํ ํด๊ฒฐํด์ผ ํฉ๋๋ค. ๋๋ก๋ Google์ด๋ ๋ค๋ฅธ ์์ค์ ํ์ธํ์ง ์๊ณ ๊ฒ์ํ์์ ์ด๋ฅผ ์ํํด์ผ ํ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ์, ์ํฉ์ ์ ์ฐจ ๋ณํ๊ณ ์์ผ๋ฉฐ ์ผ๋ถ ํ์ฌ์์๋ ์ด๋ฌํ ์ธํฐ๋ทฐ๋ฅผ ํฌ๊ธฐํ๊ณ ์์ง๋ง ๋ง์ ๊ณ ์ฉ์ฃผ๋ ์ฌ์ ํ ์ด๋ฌํ ์ ํต์ ๊ณ ์ํ๊ณ ์์ต๋๋ค. ์ด ๊ธ์ ๊ตฌ์ง์์ ์์
์ผ๋ก ์์ฃผ ์ฌ์ฉ๋๋ ์ผ๋ฐ์ ์ธ JavaScript ์์
์ ๋ํ ๋ถ์์ ๋ค๋ฃน๋๋ค.
์๋ฆผ: "Habr"์ ๋ชจ๋ ๋ ์๋ฅผ ์ํ - "Habr" ํ๋ก๋ชจ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ Skillbox ๊ณผ์ ์ ๋ฑ๋กํ ๋ 10 ๋ฃจ๋ธ ํ ์ธ.
Skillbox๋ ๋ค์์ ๊ถ์ฅํฉ๋๋ค. ์ค๊ธฐ ์ฝ์ค
"๋ชจ๋ฐ์ผ ๊ฐ๋ฐ์ PRO" .
๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์ธํฐ๋ทฐ๋ฅผ ์ฒ ์ ํ ์ค๋นํ๋ ๊ฒ์ ๋๋ค.
์, ์ ๋ฌด๋ฅผ ์ดํด๋ณด๊ธฐ ์ ์ ์ผ๋ฐ์ ์ธ ๋ฉด์ ์ค๋น ํ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋ฏธ๋ฆฌ ์ค๋นํ๋ ๊ฒ์
๋๋ค. ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ผ๋ง๋ ์ ๊ธฐ์ตํ๋์ง ํ
์คํธํ๊ณ ์ต์ํ์ง ์์ ์์ญ์ ๋ํ ์ง์์ ํฅ์์ํค์ธ์. ์ธํฐ๋ทฐ ์ค๋น์ ๋์์ด ๋๋ ์จ๋ผ์ธ ํ๋ซํผ์ด ๋ง์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์กฐ์ธํฉ๋๋ค
๊ฒฐ์ ์ ํฐ ์๋ฆฌ๋ก ๋งํ๋ ๋ฒ์ ๋ฐฐ์ฐ๋ ๊ฒ์ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๋จ์ํ ์น ํ์ ๊ธ์ ์ฐ๋ ๊ฒ(๋๋ ์กฐ์ฉํ ์ปดํจํฐ์ ์ฝ๋๋ฅผ ์ ๋ ฅํ๋ ๊ฒ)์ด ์๋ ์ง์์์๊ฒ ์์ ์ด ํ๋ ์ผ์ ๋ํด ์๋ ค์ฃผ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋์ ์ค์๊ฐ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์ ํํ๋๋ผ๋ ์ฑ๊ณต ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋๋ค.
๋ฌธ์ ํด๊ฒฐ์ ์์ํ๊ธฐ ์ ์ ๋ฌธ์ ๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ ์์ ์ ํผ์์ ์ผ๋ก ์ดํดํ ๋ค์ ์๋ชป๋ ๊ธธ๋ก ๊ฐ ์๋ ์์ต๋๋ค. ๋ฉด์ ๊ด์๊ฒ ๋ช ๊ฐ์ง ๋ช ํํ ์ง๋ฌธ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
PC๊ฐ ์๋ ์์ผ๋ก ์ฝ๋ ์์ฑ ์ฐ์ต์ ํด์ผ ํฉ๋๋ค. ์ธํฐ๋ทฐ ์ค์ ์ง์์์๊ฒ ํํธ๋ ์๋ ์์์ด ์๋ ๋ง์ปค์ ํ์ดํธ๋ณด๋๊ฐ ์ ๊ณต๋๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ํด๊ฒฐ์ฑ ์ ์ฐพ์ ๋ ์ฝ๋๋ฅผ ์ข ์ด๋ ๋ณด๋์ ์ง์ ์ ์ด ๋๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ชจ๋ ๊ฒ์ ๋จธ๋ฆฟ์์ ๋ด์๋๋ฉด ์ค์ํ ๊ฒ์ ์์ด๋ฒ๋ฆด ์๋ ์์ต๋๋ค.
JavaScript์ ํ ํ๋ฆฟ ์์
์ด๋ฌํ ์์ ์ค ์ผ๋ถ๋ ์ด๋ฏธ ์ต์ํ ๊ฒ์ ๋๋ค. ๋น์ทํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ๋ ์ธํฐ๋ทฐ๋ฅผ ํ๊ฑฐ๋ JavaScript๋ฅผ ๋ฐฐ์ฐ๋ฉด์ ์ฐ์ตํด ๋ณธ ์ ์ด ์์ ๊ฒ์ ๋๋ค. ์, ์ด์ ๋ค์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๊ณผ์ ์ ๋ํ ์์ธํ ์ค๋ช ์ ๋ค์ ์ฐจ๋ก์ ๋๋ค.
ํ๋ฌธ
ํ๋ฌธ์ ์ผ๋ฐ์ ์ธ ๋ฐฉํฅ๊ณผ ๋ฐ๋ ๋ฐฉํฅ ๋ชจ๋์์ ์ ํํ ๋์ผํ๊ฒ ์ฝํ๋ ๋จ์ด, ๋ฌธ์ฅ ๋๋ ๋ฌธ์ ์ํ์ค์ ๋๋ค. ์๋ฅผ ๋ค์ด, โAnnaโ๋ ํ๋ฌธ์ด์ง๋ง โtableโ๊ณผ โJohnโ์ ๊ทธ๋ ์ง ์์ต๋๋ค.
์คํ ์ด์ง
๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ฉด; ๋ฌธ์์ด์ด ํ๋ฌธ์ด๋ฉด true๋ฅผ ๋ฐํํ๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํ ์ ์๋ ํจ์๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๊ณต๋ฐฑ๊ณผ ๊ตฌ๋์ ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
palindrome('racecar') === ์ฐธ
ํ๋ฌธ('ํ
์ด๋ธ') === ๊ฑฐ์ง
์์ ์ ๋ถ์ํด ๋ด ์๋ค
์ฌ๊ธฐ์ ์ฃผ์ ์์ด๋์ด๋ ๋ฌธ์์ด์ ๋ค์ง๋ ๊ฒ์ ๋๋ค. "์ญ๋ฐฉํฅ" ๋ฌธ์์ด์ด ์๋ ๋ฌธ์์ด๊ณผ ์์ ํ ๋์ผํ๋ฉด ํ๋ฌธ์ ๋ฐ์ ๊ฒ์ด๋ฏ๋ก ํจ์๋ true๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด ๊ฑฐ์ง์ ๋๋ค.
๊ฒฐ์
๋ค์์ ํ๋ฌธ์ ํด๊ฒฐํ๋ ์ฝ๋์ ๋๋ค.
const palindrome = str => {
// turn the string to lowercase
str = str.toLowerCase()
// reverse input string and return the result of the
// comparisong
return str === str.split('').reverse().join('')
}
์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ์ ๋ ฅ ๋ฌธ์์ด์ ๋ฌธ์๋ฅผ ์๋ฌธ์๋ก ๋ณํํ๋ ๊ฒ์ ๋๋ค. ์ด๋ ํ๋ก๊ทธ๋จ์ด ๋์๋ฌธ์๋ ๋ค๋ฅธ ์ด๋ค ๊ฒ๋ ๋น๊ตํ์ง ์๊ณ ๋ฌธ์ ์์ฒด๋ฅผ ๋น๊ตํ๋ค๋ ๊ฒ์ ๋ณด์ฅํฉ๋๋ค.
๋ ๋ฒ์งธ ๋จ๊ณ๋ ๋ผ์ธ์ ๋ค์ง๋ ๊ฒ์ ๋๋ค. ์ด๋ ์ด๋ ต์ง ์์ต๋๋ค. .split() ๋ฉ์๋(๋ฌธ์์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด๋ก ๋ณํํด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ .reverse()(๋ฐฐ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด์ ๋ค์ง์ต๋๋ค. ๋ง์ง๋ง ๋จ๊ณ๋ .join()(๋ฐฐ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ)์ ์ฌ์ฉํ์ฌ ์ญ๋ฐฉํฅ ๋ฐฐ์ด์ ๋ฌธ์์ด๋ก ๋ณํํ๋ ๊ฒ์ ๋๋ค.
์ด์ ํด์ผ ํ ์ผ์ "์ญ๋ฐฉํฅ" ๋ฌธ์์ด์ ์๋ ๋ฌธ์์ด๊ณผ ๋น๊ตํ์ฌ ๊ฒฐ๊ณผ๊ฐ true ๋๋ false๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.
ํผ์ฆ๋ฒ์ฆ
์ธํฐ๋ทฐ์์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ์์ ์ค ํ๋์ ๋๋ค.
์คํ ์ด์ง
1๋ถํฐ n๊น์ง์ ์ซ์๋ฅผ ์ฝ์์ ์ธ์ํ๋ ํจ์๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ n์ ๋ค์ ์กฐ๊ฑด์ ๋ฐ๋ผ ํจ์๊ฐ ๋งค๊ฐ ๋ณ์๋ก ์ฌ์ฉํ๋ ์ ์์ ๋๋ค.
- 3์ ๋ฐฐ์ ๋์ fizz๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
- 5์ ๋ฐฐ์์ธ ์ซ์ ๋์ ๋ฒ์ฆ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
- 3๊ณผ 5์ ๋ฐฐ์์ธ ์ซ์ ๋์ fizzbuzz๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
์
ํผ์ฆ๋ฒ์ฆ(5)
๊ฒฐ๊ณผ
// 1
// 2
// ํ์ฐ
// 4
//๋ฒ์ ์๋ฆฌ
์์ ์ ๋ถ์ํด ๋ด ์๋ค
์ฌ๊ธฐ์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐ์๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ชจ๋๋ฌ์ค ์ฐ์ฐ์ ๋๋ ๋๋จธ์ง - %๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ ์ซ์๋ฅผ ๋๋ ๋ ๋๋จธ์ง๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ๋๋จธ์ง๊ฐ 0์ด๋ฉด ์ฒซ ๋ฒ์งธ ์ซ์๊ฐ ๋ ๋ฒ์งธ ์ซ์์ ๋ฐฐ์๋ผ๋ ์๋ฏธ์ ๋๋ค.
12% 5 // 2 -> 12๋ 5์ ๋ฐฐ์๊ฐ ์๋๋๋ค.
12% 3 // 0 -> 12๋ 3์ ๋ฐฐ์์
๋๋ค.
๋ฐ๋ผ์ 12๋ฅผ 5๋ก ๋๋๋ฉด 2๊ฐ ๋๊ณ ๋๋จธ์ง๋ 2๊ฐ ๋ฉ๋๋ค. 12๋ฅผ 3์ผ๋ก ๋๋๋ฉด 4๊ฐ ๋๊ณ ๋๋จธ์ง๋ 0์ด ๋ฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๊ฒฝ์ฐ 12๋ 5์ ๋ฐฐ์๊ฐ ์๋๊ณ ๋ ๋ฒ์งธ ๊ฒฝ์ฐ , 12๋ 3์ ๋ฐฐ์์ ๋๋ค.
๊ฒฐ์
์ต์ ์ ์๋ฃจ์ ์ ๋ค์ ์ฝ๋์ ๋๋ค.
const fizzBuzz = num => {
for(let i = 1; i <= num; i++) {
// check if the number is a multiple of 3 and 5
if(i % 3 === 0 && i % 5 === 0) {
console.log('fizzbuzz')
} // check if the number is a multiple of 3
else if(i % 3 === 0) {
console.log('fizz')
} // check if the number is a multiple of 5
else if(i % 5 === 0) {
console.log('buzz')
} else {
console.log(i)
}
}
}
์ด ํจ์๋ ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ์ฌ ํ์ํ ๊ฒ์ฌ๋ฅผ ์ํํ๊ณ ์ฌ์ฉ์๊ฐ ์๊ตฌํ๋ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค. ๋ฌธ์ ์์๋ if...else ๋ฌธ์ ์์์ ์ฃผ์ํ ํ์๊ฐ ์์ต๋๋ค. ์ฆ, ์ด์ค ์กฐ๊ฑด(&&)์ผ๋ก ์์ํ๊ณ ์ฌ๋ฌ ์ซ์๋ฅผ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ๋ก ๋๋ฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ๋ชจ๋ ์ต์ ์ ๋ค๋ฃน๋๋ค.
์ฒ ์ ๋ฐ๊พธ๊ธฐ
์ด๋ ๋ค๋ฅธ ๋จ์ด์ ๋ชจ๋ ๋ฌธ์๋ฅผ ๊ฐ์ ์ซ์๋ก ํฌํจํ์ง๋ง ์์๊ฐ ๋ค๋ฅธ ๋จ์ด์ ์ด๋ฆ์ ๋๋ค.
์คํ ์ด์ง
๋ ๋ฌธ์์ด์ด ์ฒ ์ ๋ฐ๊พธ๊ธฐ์ธ์ง, ๋์๋ฌธ์๋ ์ค์ํ์ง ์์์ง ํ์ธํ๋ ํจ์๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ๋ฌธ์๋ง ๊ณ์ฐ๋ฉ๋๋ค. ๊ณต๋ฐฑ์ด๋ ๊ตฌ๋์ ์ ๊ณ ๋ ค๋์ง ์์ต๋๋ค.
anagram('finder', 'Friend') โ> ์ฐธ
anagram('hello', 'bye') โ> ๊ฑฐ์ง
์์ ์ ๋ถ์ํด ๋ด ์๋ค
์ฌ๊ธฐ์ ์ค์ํ ์ ์ ๋ ์ ๋ ฅ์ค์ ๊ฐ ๋ฌธ์์ ๊ฐ ์ค์ ์ซ์๋ฅผ ํ์ธํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
ํ์ธ๋ โ> f: ์น๊ตฌ 1๋ช
โ> f: 1
๋: 1 ๋ฅด: 1
n: 1 ๋: 1
d: 1 ์ ์: 1
์ ์: 1 n: 1
r: 1 d: 1
์ฒ ์ ๋ฐ๊พธ๊ธฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ค๋ฉด JavaScript ๊ฐ์ฒด ๋ฆฌํฐ๋ด๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ์ ํํด์ผ ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ํต์ฌ์ ๋ฌธ์์ ๋ฌธ์์ด๊ณ ๊ฐ์ ํ์ฌ ์ค์์ ๋ฐ๋ณต๋๋ ํ์์ ๋๋ค.
๋ค๋ฅธ ์กฐ๊ฑด์ด ์์ต๋๋ค:
- ๋น๊ตํ ๋ ๋ฌธ์์ ๋/์๋ฌธ์๊ฐ ๊ณ ๋ ค๋์ง ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ๊ฐ๋จํ ๋ ๋ฌธ์์ด์ ๋ชจ๋ ์๋ฌธ์ ๋๋ ๋๋ฌธ์๋ก ๋ณํํฉ๋๋ค.
- ๋น๊ต์์ ๋ฌธ์๊ฐ ์๋ ๋ชจ๋ ํญ๋ชฉ์ ์ ์ธํฉ๋๋ค. ํจ๊ป ์์
ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
์ ๊ท ํํ์ .
๊ฒฐ์
// helper function that builds the
// object to store the data
const buildCharObject = str => {
const charObj = {}
for(let char of str.replace(/[^w]/g).toLowerCase()) {
// if the object has already a key value pair
// equal to the value being looped over,
// increase the value by 1, otherwise add
// the letter being looped over as key and 1 as its value
charObj[char] = charObj[char] + 1 || 1
}
return charObj
}
// main function
const anagram = (strA, strB) => {
// build the object that holds strA data
const aCharObject = buildCharObject(strA)
// build the object that holds strB data
const bCharObject = buildCharObject(strB)
// compare number of keys in the two objects
// (anagrams must have the same number of letters)
if(Object.keys(aCharObject).length !== Object.keys(bCharObject).length) {
return false
}
// if both objects have the same number of keys
// we can be sure that at least both strings
// have the same number of characters
// now we can compare the two objects to see if both
// have the same letters in the same amount
for(let char in aCharObject) {
if(aCharObject[char] !== bCharObject[char]) {
return false
}
}
// if both the above checks succeed,
// you have an anagram: return true
return true
}
์ฌ์ฉ์ ์ฃผ์
['f', 'i', 'n', 'd', 'e', โโโโ'r']
์ด๋ ๊ฒ ํ๋ฉด ๋๋ ๋ฃจํ๋ฅผ ์ํํ์ง ์๊ณ ๋ ๊ฐ์ฒด์ ์์ฑ์ ์ป์ ์ ์์ต๋๋ค. ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ .length ์์ฑ๊ณผ ํจ๊ป ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ ๋ฌธ์์ด์ ๋ฌธ์ ์๊ฐ ๋์ผํ์ง ํ์ธํ ์ ์์ต๋๋ค. ์ด๋ ์ฒ ์ ๋ฐ๊พธ๊ธฐ์ ์ค์ํ ๊ธฐ๋ฅ์ ๋๋ค.
๋ชจ์ ๊ฒ์
์ธํฐ๋ทฐ์์ ์์ฃผ ๋ฑ์ฅํ๋ ๋งค์ฐ ๊ฐ๋จํ ์์ ์ ๋๋ค.
์คํ ์ด์ง
๋ฌธ์์ด์ ์ธ์๋ก ์ฌ์ฉํ๊ณ ๋ฌธ์์ด์ ํฌํจ๋ ๋ชจ์ ์๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
๋ชจ์์ "a", "e", "i", "o", "u"์
๋๋ค.
์ :
findVowels('hello') // โ> 2
findVowels('์ด์ ') // โ> 0
๊ฒฐ์
๊ฐ์ฅ ๊ฐ๋จํ ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
const findVowels = str => {
let count = 0
const vowels = ['a', 'e', 'i', 'o', 'u']
for(let char of str.toLowerCase()) {
if(vowels.includes(char)) {
count++
}
}
return count
}
.includes() ๋ฉ์๋ ์ฌ์ฉ์ ์ฃผ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ฌธ์์ด๊ณผ ๋ฐฐ์ด ๋ชจ๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐฐ์ด์ ํน์ ๊ฐ์ด ํฌํจ๋์ด ์๋์ง ํ์ธํ๋ ๋ฐ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ด ๋ฉ์๋๋ ๋ฐฐ์ด์ ์ง์ ๋ ๊ฐ์ด ํฌํจ๋์ด ์์ผ๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
๋ฌธ์ ์ ๋ํ ๋ ์งง์ ํด๊ฒฐ์ฑ ์ด ์์ต๋๋ค.
const findVowels = str => {
const matched = str.match(/[aeiou]/gi)
return matched ? matches.length : 0
}
์ด๋ ํจ์จ์ ์ธ ๊ฒ์์ ๊ตฌํํ ์ ์๋ .match() ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฉ์๋ ์ธ์์ธ ์ ๊ท์์ด ์ง์ ๋ ๋ฌธ์์ด ๋ด์์ ๋ฐ๊ฒฌ๋๋ฉด ๋ฐํ ๊ฐ์ ์ผ์นํ๋ ๋ฌธ์์ ๋ฐฐ์ด์ ๋๋ค. ์ผ์นํ๋ ํญ๋ชฉ์ด ์์ผ๋ฉด .match()๋ null์ ๋ฐํํฉ๋๋ค.
ํผ๋ณด๋์น
๋ค์ํ ์์ค์ ์ธํฐ๋ทฐ์์ ์ฐพ์ ์ ์๋ ๊ณ ์ ์ ์ธ ์์ ์ ๋๋ค. ํผ๋ณด๋์น ์์ด์ ๊ฐ ํ์ ์ซ์๊ฐ ์ด์ ๋ ์ซ์์ ํฉ์ธ ์ผ๋ จ์ ์ซ์๋ผ๋ ์ ์ ๊ธฐ์ตํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฒ์ 0๊ฐ์ ์ซ์๋ 1, 1, 2, 3, 5, 8, 13, 21, 34, XNUMX์ ๊ฐ์ต๋๋ค.
์คํ ์ด์ง
ํน์ ์ํ์ค์ n๋ฒ์งธ ๋ ์ฝ๋๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ์์ฑํด์ผ ํ๋ฉฐ, n์ ํจ์์ ์ธ์๋ก ์ ๋ฌ๋๋ ์ซ์์ ๋๋ค.
ํผ๋ณด๋์น(3) // โ> 2
์ด ์์ ์๋ ์ธ์์ ์ง์ ๋ ํ์๋งํผ ๋ฃจํ๋ฅผ ํต๊ณผํ์ฌ ์ ์ ํ ์์น์ ๊ฐ์ ๋ฐํํ๋ ์์ ์ด ํฌํจ๋ฉ๋๋ค. ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ๋ ์ด๋ฌํ ๋ฐฉ๋ฒ์๋ ๋ฃจํ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋์ ์ฌ๊ท๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉด์ ๊ด์ ๊ธฐ์๊ฒ ํ๊ณ ๋ช ๊ฐ์ง ์ถ๊ฐ ์ ์๋ฅผ ์ค ์ ์์ต๋๋ค.
๊ฒฐ์
const fibonacci = num => {
// store the Fibonacci sequence you're going
// to generate inside an array and
// initialize the array with the first two
// numbers of the sequence
const result = [0, 1]
for(let i = 2; i <= num; i++) {
// push the sum of the two numbers
// preceding the position of i in the result array
// at the end of the result array
const prevNum1 = result[i - 1]
const prevNum2 = result[i - 2]
result.push(prevNum1 + prevNum2)
}
// return the last value in the result array
return result[num]
}
๊ฒฐ๊ณผ ๋ฐฐ์ด์์๋ ์ํ์ค์ ๊ฐ ํญ๋ชฉ์ด ์ด์ ๋ ์ซ์์ ํฉ์ด๊ธฐ ๋๋ฌธ์ ์ฒ์ ๋ ์ซ์๊ฐ ์๋ฆฌ์ฆ์ ํฌํจ๋ฉ๋๋ค. ๋งจ ์ฒ์์๋ ๋ค์ ์ซ์๋ฅผ ์ป๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ ๋ ๊ฐ์ ์ซ์๊ฐ ์์ผ๋ฏ๋ก ๋ฃจํ๊ฐ ์๋์ผ๋ก ์ซ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ฏ์ด ์ฒ์ ๋ ์ซ์๋ ํญ์ 0๊ณผ 1์ ๋๋ค. ๋ฐ๋ผ์ ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ์๋์ผ๋ก ์ด๊ธฐํํ ์ ์์ต๋๋ค.
์ฌ๊ท์ ๊ฒฝ์ฐ ๋ชจ๋ ๊ฒ์ด ๋ ๊ฐ๋จํ๋ฉด์๋ ๋์์ ๋ ๋ณต์กํด์ง๋๋ค.
const fibonacci = num => {
// if num is either 0 or 1 return num
if(num < 2) {
return num
}
// recursion here
return fibonacci(num - 1) + fibonacci(num - 2)
}
์ฐ๋ฆฌ๋ fibonacci()๋ฅผ ๊ณ์ ํธ์ถํ์ฌ ์ ์ ๋ ์์ ์ซ์๋ฅผ ์ธ์๋ก ์ ๋ฌํฉ๋๋ค. ์ ๋ฌ๋ ์ธ์๊ฐ 0 ๋๋ 1์ด๋ฉด ์ค์ง๋ฉ๋๋ค.
์ถ๋ ฅ
ํ๋ก ํธ์๋ ๋๋ JavaScript ๊ฐ๋ฐ์ ์ง์ ์ ๋ํ ์ธํฐ๋ทฐ๋ฅผ ํ๋ค๋ฉด(ํนํ ์ฃผ๋์ด ๋ ๋ฒจ์ธ ๊ฒฝ์ฐ) ์ด๋ฏธ ์ด๋ฌํ ์์ ์ ์ ํ์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ๊ทธ๋ฌ๋ ์์ง ๋ฐ๊ฒฌํ์ง ๋ชปํ๋ค๋ฉด ํฅํ ์ ์ด๋ ์ผ๋ฐ์ ์ธ ๊ฐ๋ฐ์๋ ์ ์ฉํ ์ ์์ต๋๋ค.
Skillbox๋ ๋ค์์ ๊ถ์ฅํฉ๋๋ค.
- ์จ๋ผ์ธ ๊ฐ์ข ์ ์ฉ
"ํ์ด์ฌ ๋ฐ์ดํฐ ๋ถ์๊ฐ" .- ์จ๋ผ์ธ ์ฝ์ค
"์ง์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์" .- ์ค๊ธฐ ์ฝ์ค
"0์์ PRO๋ก์ PHP ๊ฐ๋ฐ์" .
์ถ์ฒ : habr.com