์๊ฐ๊ณผ ๊ณผ์ ์ ์ ์ ๋ฆฌํ๊ณ ํธ๋ ๊ฒ ์ผ๋ง๋ ์ค์ํ์ง ๋ ๊นจ๋ฌ์๋ค.
์ด์ ๋ ํ๋ ค๊ณ ํ ๋์๊ฐ ์ ๋ ์๋ ํ๋๋ฐ ํต๊ณผ ๋ชปํ๋ค.
์ฐ์๋ ๋ฌธ์๋ ๋งํ์ง ๋ชปํ๋ค๋ ๊ฑธ ๋ฆ๊ฒ ์ธ์ํ๊ณ , ์ด๋ป๊ฒ ํ๋ณํด์ผํ๋ ๋พฐ์กฑํ ์๊ฐ ์๊ฐ๋์ง ์์๋ค.
(์ด๋ฏธ ์ข ์ง์นจ)
์ค๋์ ์ด์ ์ฐธ์ ๋ชปํ ๋น๋์ข๊ฐ ์ด์ ๊บผ ํผ๋ค๊ณ ํ์ ์ ๋๋ ๋ค์ ์๋ํด๋ณด๊ธฐ๋ก ํ๋ค.
๊ทธ๋ฆฌ๊ณ ํ์๋ค!! ์ผํธ!
function solution(babbling) {
const words = ["aya", "ye", "woo", "ma"];
const isSeries = (b, word) => {
let s = b.replaceAll(word, "?");
for (let i = 1; i < s.length; i++) {
if (s[i] === "?") {
if (s[i - 1] === "?") return true;
}
} return false;
}
words.map(w => {
babbling = babbling.map(b => {
if (w.length > 1) {
if (!isSeries(b, w)) {
return b.split(w).join(" ");
}
}
return b;
})
})
return babbling.filter(v => v.trim() == "").length
}
0. ๊ฐ์ฅ ์งง์ ๋จ์ด์ ๊ธธ์ด๊ฐ 2์ด๊ธฐ ๋๋ฌธ์ length ๊ฐ 2๋ฏธ๋ง์ธ ๋จ์ด๋ ๊ฑธ๋ฌ๋ธ๋ค. (๊ฒ์ฌํ์ง ์๋๋ค.)
1. ์ฐ์๋๋ ๋จ์ด๊ฐ ๋ค์ด์๋ ์น์์ด๋ ๊ฑธ๋ฌ๋ธ๋ค. => isSeries ๊ฐ false ์ฌ์ผํจ.
1-1. isSeries ํจ์์์ maping ๋๊ณ ์๋ ๋จ์ด๋ฅผ ํน์ํ ๋ฌธ์("?")๋ก ๋์ฒดํ ํ,
๊ทธ ๋ฌธ์๊ฐ ์ฐ์ํด์ ์๋ ๊ฒฝ์ฐ true ๋ฅผ ๋ฐํํ๋ค.
2. ๋จ์ด ๊ธธ์ด๊ฐ ์ต์ 2์ด๊ณ , ์ฐ์๋ ๋ฌธ์๊ฐ ์๋ ๊ฒฝ์ฐ์ ์น์์ด๋ค๋ง split์ ํตํด ์์ ์ค๋ค.(์๊ฑฐ)
3. ํ์ง๋ง join()์ ๊ณต๋ฐฑ์ผ๋ก ์ฒ๋ฆฌํ๋ฉด ์ด์ ๋จ์ด๋ก ์๊ฑฐ๋ ์น์์ด๊ฐ ๋จ์ด์ ์ผ์นํ๋ ๊ฒฝ์ฐ๋ ์๊ธธ ์ ์๊ธฐ ๋๋ฌธ์
(ex) "myeyea")
" " ๋์ด์ฐ๊ธฐ๋ฅผ ํด์ ๋ถ์ง ์๊ฒ ์ฒ๋ฆฌํด์คฌ๋ค.
์ด ๊ณผ์ ์ ๊ฑฐ์น ๋จ์ด๋ฅผ trim() ํ์ ๋ "" ์ธ ๋จ์ด ์ฆ, ๋ชจ๋ ๊ฑธ๋ฌ์ง ๋จ์ด์ ๊ธธ์ด๋ง ์ธ๋ฉด
์ฃผ์ด์ง ๋จ์ด๋ก ๋งํ ์ ์๋ ์น์์ด์ ์๋ฅผ ์ ์ ์๋ค.
ใ ใ ใ ใ ใ
1. isSeries ํจ์: ๋ฌธ์์ด b์์ ๋จ์ด word๊ฐ ์ฐ์์ผ๋ก ๋ฑ์ฅํ๋์ง ํ์ธํ๋ฉฐ, ์ฐ์ ๋ฑ์ฅ ์ true๋ฅผ ๋ฐํํฉ๋๋ค.
2. map ํจ์: 'babbling' ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด 'words' ๋ฐฐ์ด์ ๊ฐ ๋จ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์ฐ์ ์ํํฉ๋๋ค.
3. ๋จ์ด ์นํ: ๋จ์ด w์ ๊ธธ์ด๊ฐ 1๋ณด๋ค ํฌ๊ณ 'b'์์ w๊ฐ ์ฐ์์ ์ผ๋ก ๋ฑ์ฅํ์ง ์์ ๊ฒฝ์ฐ, 'b'์์ 'w'๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ์นํํฉ๋๋ค.
4. ์นด์ดํธ: ์์ ๋ 'babbling' ๋ฐฐ์ด์์ ๊ณต๋ฐฑ ๋ฌธ์์ด์ ์๋ฅผ ์นด์ดํธํ๊ณ , ์ด๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๋ ๋จธ์ฑ์ด์ ์กฐ์นด๊ฐ ๋ฐ์ํ ์ ์๋ ๋จ์ด์ ์๋ฅผ ๋ํ๋ ๋๋ค.
๋น๋๋์ด ๊น๋ํ๊ฒ ์ ๋ฆฌํด์ฃผ์ฌใ ใ ใ
์ด๊ฑฐ์จ ๊ณ ์ ๋น๋์ข์ ์ฝ๋.
๋ณด๊ธฐ๋ง ํด๋ ๊ณ ์์ ํฅ๊ธฐ๊ฐ ๋๋ค.
const solution = (babbling) => {
const regex = /^(aya|ye|woo|ma)*$/;
return babbling.reduce((count, babble) => {
if (!babble.match(regex)) {
return count;
}
let lastWord = '';
let currentWord = '';
for (let char of babble) {
currentWord += char;
if (['aya', 'ye', 'woo', 'ma'].includes(currentWord) && lastWord !== currentWord) {
lastWord = currentWord;
currentWord = '';
}
}
return currentWord === '' ? count + 1 : count;
}, 0);
}
char ๋ฅผ ์ด์ฉํด์ ๋จ์ด๊ฐ ๋ง์์ง๋์ง ํ์ธํ๋ ์์ ์ ํ๋ค..
๊ทธ๋ฆฌ๊ณ && ๋ค์์ด ์ฐ์ํ๋์ง ์ฒดํฌํ๋๊ฑด๊ฐ?
ํ๊ณ ์๋๋ฐ ์น์ ํ๊ฒ ์ค๋ช ์ใ ใ ใ ใ ใ ใ
const regex = /^(aya|ye|woo|ma)*$/;
regex ์ ๊ท ํํ์์ "aya", "ye", "woo", "ma" ์ค ํ๋ ๋๋ ๊ทธ ์กฐํฉ์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด๊ณผ ์ผ์นํ๋์ง๋ฅผ ํ์ธํฉ๋๋ค. ์ฌ๊ธฐ์ '^'๋ ๋ฌธ์์ด์ ์์์, '$'๋ ๋ฌธ์์ด์ ๋์ ๋ํ๋
๋๋ค.
return babbling.reduce((count, babble) => {
reduce ํจ์๋ 'babbling' ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์์
์ ์ํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋์ ํ์ฌ ๋ฐํํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๊ฐ ์์๊ฐ ๋จธ์ฑ์ด์ ์กฐ์นด๊ฐ ๋ฐ์ํ ์ ์๋ ๋จ์ด์ธ์ง๋ฅผ ํ์ธํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์นด์ดํธ์ ๋์ ํฉ๋๋ค.
if (!babble.match(regex)) {
return count;
}
๋ฐ๋ผ์ ์ด ์ ๊ท ํํ์์ ๋ฌธ์์ด ์ ์ฒด๊ฐ "aya", "ye", "woo", "ma" ์ค ํ๋ ๋๋ ๊ทธ ์กฐํฉ์ผ๋ก ์ด๋ฃจ์ด์ก๋์ง๋ฅผ ํ์ธํฉ๋๋ค.
๋ง์ฝ ์ด ์กฐ๊ฑด์ ๋ง์ง ์์ผ๋ฉด, ๊ทธ ์์๋ ๋จธ์ฑ์ด์ ์กฐ์นด๊ฐ ๋ฐ์ํ ์ ์๋ ๋จ์ด์ด๋ฏ๋ก ์นด์ดํธ๋ฅผ ์ฆ๊ฐ์ํค์ง ์์ต๋๋ค.
๋ฌธ์์ด์ ์ํํ๊ธฐ ์์ํฉ๋๋ค. ๊ฐ ๋ฌธ์๋ฅผ currentWord์ ์ถ๊ฐํฉ๋๋ค.
for (let char of babble) {
currentWord += char;
currentWord๊ฐ 'aya', 'ye', 'woo', 'ma' ์ค ํ๋์ ํฌํจ๋๋์ง ํ์ธํฉ๋๋ค. ์ด๊ฒ์ ๋ง์ฝ currentWord๊ฐ ์ด๋ค ์ค ํ๋์ ์ผ์นํ๋ฉด, ์ฐ๋ฆฌ๋ ์์ ํ ๋จ์ด๋ฅผ ์ฐพ์์์ ์๋ฏธํฉ๋๋ค. ๋์์, ์ด ๋จ์ด๋ ์ด์ ์ ์ฐพ์ ๋จ์ด(lastWord)์ ๊ฐ์ง ์์์ผ ํฉ๋๋ค. ์ด๋ ์กฐ์นด๊ฐ ์ฐ์๋ ๊ฐ์ ๋จ์ด๋ฅผ ๋ฐ์ํ์ง ์๋๋ค๋ ๊ท์น์ ๋ง์กฑ์ํต๋๋ค.
if (['aya', 'ye', 'woo', 'ma'].includes(currentWord) && lastWord !== currentWord) {
๋ง์ฝ currentWord๊ฐ ์ฐพ๊ณ ์๋ ๋จ์ด ๋ชฉ๋ก์ ์๊ณ ์ด์ ๋จ์ด์ ๋ค๋ฅด๋ค๋ฉด, lastWord์ ํ์ฌ ๋จ์ด๋ฅผ ์ ์ฅํ๊ณ currentWord๋ฅผ ์ด๊ธฐํํฉ๋๋ค. ์ด๋ฅผ ํตํด ์๋ก์ด ๋จ์ด๋ฅผ ์ฐพ๊ธฐ ์์ํฉ๋๋ค.
lastWord = currentWord;
currentWord = '';
}
๋ชจ๋ ๋ฌธ์๋ฅผ ์ํํ ํ์, currentWord๊ฐ ๋น ๋ฌธ์์ด์ธ์ง ํ์ธํฉ๋๋ค. ๋ง์ฝ currentWord๊ฐ ๋น ๋ฌธ์์ด์ด๋ผ๋ฉด, babble์ด ๊ท์น์ ๋ฐ๋ผ ์ฌ๋ฐ๋ฅด๊ฒ ๋ฐ์ํ ์ ์๋ ๋จ์ด๋ค๋ก๋ง ๊ตฌ์ฑ๋์ด ์๋ค๋ ๋ป์ด๋ฏ๋ก ์นด์ดํธ๋ฅผ ์ฆ๊ฐ์ํต๋๋ค. ๋ฐ๋๋ก currentWord๊ฐ ๋น ๋ฌธ์์ด์ด ์๋๋ผ๋ฉด, ๋ง์ง๋ง ๋จ์ด๊ฐ ์์ฑ๋์ง ์์ ๊ฒ์ด๋ฏ๋ก ์นด์ดํธ๋ฅผ ์ฆ๊ฐ์ํค์ง ์์ต๋๋ค.
return currentWord === '' ? count + 1 : count;
์ด์ ๊ฐ์ด ์๋ํ๋ ๋ฐฉ์์ผ๋ก 'babbling' ๋ฐฐ์ด์ ๊ฐ ์์๊ฐ ๋จธ์ฑ์ด์ ์กฐ์นด๊ฐ ๋ฐ์ํ ์ ์๋ ๋จ์ด์ธ์ง ํ๋จํ๊ณ , ๊ฐ๋ฅํ ๋จ์ด์ ์๋ฅผ ๋ฐํํฉ๋๋ค.
ใ ใ ใ ใ ใ ใ
๊ฐ๋ ์๋ ์ข ์ข ๋น๋๋ด์ด๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ ์ค๋์ ํนํ ๋ ๋ด๊ฐ์ผ์ฌใ ใ ใ ใ ใ ใ ใ
ํคํค ํ๋ฉด ๋ ์ฌ๋ฐ๊ณ ๋ชปํ๋ฉด ์ฌ๋ฏธ์๊ณ ์ด๋ ต๊ณ ๊ทธ๋ฅด๋น
+ ์ถฉ๊ฒฉ์ ํ์ด
function solution(babbling) {
const regexp1 = /(aya|ye|woo|ma)\1+/;
const regexp2 = /^(aya|ye|woo|ma)+$/;
return babbling.reduce((ans, word) => (
!regexp1.test(word) && regexp2.test(word) ? ++ans : ans
), 0);
}
'ํ์ ๊ณต๋ถ > ๐ซง ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ || ํ๋ก๊ทธ๋๋จธ์ค] ์ผ์ชฝ ์ค๋ฅธ์ชฝ (0) | 2023.07.16 |
---|---|
[์๊ณ ๋ฆฌ์ฆ || ํ๋ก๊ทธ๋๋จธ์ค] ์ฒด์ก๋ณต (0) | 2023.07.14 |
[์๊ณ ๋ฆฌ์ฆ || ํ๋ก๊ทธ๋๋จธ์ค] ์ซ์ ์ง๊ฟ (0) | 2023.07.11 |
[์๊ณ ๋ฆฌ์ฆ || ํ๋ก๊ทธ๋๋จธ์ค] [1์ฐจ] ๋คํธ ๊ฒ์ (0) | 2023.07.06 |
[์๊ณ ๋ฆฌ์ฆ || ํ๋ก๊ทธ๋๋จธ์ค] ๋ง์น ํ๊ธฐ (0) | 2023.07.04 |