โ๏ธ ๋ฌธ์ ๋งํฌ
https://school.programmers.co.kr/learn/courses/30/lessons/42577?language=javascript
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
โ๏ธ ๋ฌธ์ ์์ฝ
์ ํ๋ฒํธ๊ฐ ๋์ด๋ ๋ฐฐ์ด phone_book์ด ์๊ณ , ํน์ ์ ํ๋ฒํธ๊ฐ ๋ค๋ฅธ ์ ํ๋ฒํธ์ ์ ๋์ด์ ์์นํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ฉด false๋ฅผ ๋ฐํ, ์๋ค๋ฉด true๋ฅผ ๋ฐํ
๐ด ์ ํ์ฌํญ
- phone_book์ ๊ธธ์ด๋ 1 ์ด์ 1,000,000 ์ดํ์ด๋ค.
- ๊ฐ ์ ํ๋ฒํธ์ ๊ธธ์ด๋ 1 ์ด์ 20 ์ดํ์ด๋ค.
- ๊ฐ์ ์ ํ๋ฒํธ๊ฐ ์ค๋ณตํด์ ๋ค์ด์์ง ์๋ค.
๐ฉ ์ ๊ทผ๋ฒ
ํด์ ๋ฌธ์ ๋ผ๊ณ ํ๊ธฐ๋๋ฌธ์ ์ฒ์์๋ ํด์๋ก ์ ๊ทผํด์ ์ ๋์ฌ๋ฅผ key๋ก ์ ์ฅํ๊ณ ํ๋ํ๋ ์ฒดํฌํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ ค๊ณ ํ๋๋ฐ ์๊ฐ๋ณต์ก๋๊ฐ O(n^2)์ด ๋์ ์๊ฐ์ด๊ณผ๋ก ์คํจํ๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ค๊ณ ํ์ง๋ง ๋ฐฉ๋ฒ์ด ๋ ์ค๋ฅด์ง ์์, ๋ค๋ฅธ ๋ถ๋ค์ ๋ฐฉ๋ฒ์ ์ฐธ๊ณ ํ๋ค.
ํด๋น ๋ฌธ์ ๋ฅผ ํตํด some, indexOf, startsWith์ ์ฌ์ฉ๋ฒ์ ์์งํ ์ ์์๋ค.
๐ก์ฝ๋
function solution(phone_book) {
return !phone_book.sort().some((value, index, self) => self[index+1]?.indexOf(value) === 0);
}
- phone_book์ ๋จผ์ ์ ๋ ฌํ์ฌ ๋ฌธ์์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํด์ค๋๋ค.
- some method๋ ๋ฐฐ์ด ์ค ํน์ ์กฐ๊ฑด์ ๋ถํฉํ๋ ์ผ์ด์ค๊ฐ ํ๋๋ผ๋ ์๋ค๋ฉด true๋ฅผ ๋ฐํํ๋ ๋ฉ์๋์ด๋ค. ์ด๋ฅผ ์ด์ฉํ์ฌ ํ์ฌ์ ๊ฐ์ธ value์ ๊ธฐ์กด array์ธ phone_book์ ์๋ฏธํ๋ self์ index+1์ ๊ฐ์ ๋น๊ตํฉ๋๋ค.
- indexOf method๋ฅผ ์ด์ฉํ์ฌ value์ ๊ฐ์ด self[index+1]์ ํฌํจ๋๋์ง ํ์ธํฉ๋๋ค. ๋ฐํ๊ฐ์ ํฌํจ๋๋ค๋ฉด ํฌํจ๋๋ ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ ์ ๋์ฌ์ ์์นํ๋ค๋ฉด 0์ ๋ฐํํด์ผ๊ฒ ์ฃ .
- 0์ ๋ฐํํ๋ค๋ฉด some์์ ํ๋๋ผ๋ true๊ฐ ๋์จ๊ฒ์ด๋ return๊ฐ์ true์ ๋ฐ๋์ธ false๊ฐ ๋๊ฒ ๋ฉ๋๋ค.
startsWith๋ฅผ ์ฌ์ฉํ ์ฝ๋
function solution(phone_book) {
return !phone_book.sort().some((value, index, self) => self[index+1]?.startsWith(value));
}
- startsWith๋ ํด๋น ๋ฌธ์์ด์ด ๋งค๊ฐ๋ณ์๋ก ๋ค์ด๊ฐ value๊ฐ์ผ๋ก ์์ํ๋์ง๋ฅผ true or false๋ก ๋ฐํํ๋ ๋ฉ์๋์ ๋๋ค. ํด๋น๋ฌธ์ ์์๋ ํจ์ฌ ๋ ์ง๊ด์ ์ด๋ฏ๋ก ์ฌ์ฉํ๊ธฐ์ ์ข๊ฒ ๋ค์.