๐ ๋ฌธ์ ์ค๋ช
๋ ๊ฐ์ ๋จ์ด begin, target๊ณผ ๋จ์ด์ ์งํฉ words๊ฐ ์์ต๋๋ค. ์๋์ ๊ฐ์ ๊ท์น์ ์ด์ฉํ์ฌ begin์์ target์ผ๋ก ๋ณํํ๋ ๊ฐ์ฅ ์งง์ ๋ณํ ๊ณผ์ ์ ์ฐพ์ผ๋ ค๊ณ ํฉ๋๋ค.
1. ํ ๋ฒ์ ํ ๊ฐ์ ์ํ๋ฒณ๋ง ๋ฐ๊ฟ ์ ์์ต๋๋ค.
2. words์ ์๋ ๋จ์ด๋ก๋ง ๋ณํํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด begin์ด "hit", target๊ฐ "cog", words๊ฐ ["hot","dot","dog","lot","log","cog"] ๋ผ๋ฉด
"hit" -> "hot" -> "dot" -> "dog" -> "cog"์ ๊ฐ์ด 4๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ๋ณํํ ์ ์์ต๋๋ค.
๋ ๊ฐ์ ๋จ์ด begin, target๊ณผ ๋จ์ด์ ์งํฉ words๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ต์ ๋ช ๋จ๊ณ์ ๊ณผ์ ์ ๊ฑฐ์ณ begin์ target์ผ๋ก ๋ณํํ ์ ์๋์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
๐ ์ ํ ์ฌํญ
- ๊ฐ ๋จ์ด๋ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- ๊ฐ ๋จ์ด์ ๊ธธ์ด๋ 3 ์ด์ 10 ์ดํ์ด๋ฉฐ ๋ชจ๋ ๋จ์ด์ ๊ธธ์ด๋ ๊ฐ์ต๋๋ค.
- words์๋ 3๊ฐ ์ด์ 50๊ฐ ์ดํ์ ๋จ์ด๊ฐ ์์ผ๋ฉฐ ์ค๋ณต๋๋ ๋จ์ด๋ ์์ต๋๋ค.
- begin๊ณผ target์ ๊ฐ์ง ์์ต๋๋ค.
- ๋ณํํ ์ ์๋ ๊ฒฝ์ฐ์๋ 0๋ฅผ return ํฉ๋๋ค.
๐ ์ ์ถ๋ ฅ ์
begin | target | words | return |
"hit" | "cog" | ["hot", "dot", "dog", "lot", "log", "cog"] | 4 |
"hit" | "cog" | ["hot", "dot", "dog", "lot", "log"] | 0 |
๐ ์
์ถ๋ ฅ ์ ์ค๋ช
์์ #1: ๋ฌธ์ ์ ๋์จ ์์ ๊ฐ์ต๋๋ค.
์์ #2: target์ธ "cog"๋ words ์์ ์๊ธฐ ๋๋ฌธ์ ๋ณํํ ์ ์์ต๋๋ค.
๐ ๋์ ์๋ฃจ์
function changeOneLetter(word1, word2) {
let count = 0;
for (let i=0; i<word1.length; i++){
if (word1[i] !== word2[i]){
count++;
}
}
return count === 1;
}
function solution(begin, target, words) {
if (!words.includes(target)){
return 0;
}
let depth = [];
function dfs(b, w, count) {
w.forEach((el, idx) => {
if (changeOneLetter(b, el)) {
if (el === target) {
depth.push(count);
} else {
dfs(el, w.slice(0, idx).concat(w.slice(idx+1)), count+1)
}
}
})
}
dfs(begin, words, 1)
return Math.min(...depth);
}
๐ ๋ฐฐ์ด ์ (์์ฌ์ด ์ )
- ํ ์คํธ ์ผ์ด์ค๋ ํต๊ณผํ์ผ๋, ์คํฐ๋์๋ค๊ณผ ๋ ผ์ํ๋ ์ค "begin ์์ target ์ผ๋ก ๋๋ฌํ ์ ์๋ ๊ฒฝ์ฐ" ๋ ํฌํจ๋์ง ์์ ์ฝ๋๋ผ๋ ์ฌ์ค์ ๋ฐ๊ฒฌํ๋ค. ์ด๋ ์๋ง ํ ์คํธ ์ผ์ด์ค๊ฐ ๋ง์ง ์์ ๋ฐ์ํ ๋ฒ๊ทธ์ธ ๊ฒ ๊ฐ์๋ฐ, return ๋ฌธ์์ ์ผํญ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ๊ฐ์ ํ๋ฉด ๋ ๋ง์ ์ผ์ด์ค๋ฅผ ํฌ๊ดํ ์ ์์ ๊ฒ์ด๋ผ๋ ๊ฒฐ๋ก ์ ๋ด๋ ธ๋ค.
- bfs ์๋ ์ต์ํด์ ธ์ผ ํ๋๋ฐ, dfs ๋ก๋ง ์์ ์ ํ๋ค๋ณด๋ bfs ์ฌ๊ณ ๋ฅผ ์ ์ ๋ชปํ๊ณ ์๋ค. bfs ๋ก๋ ๋ค์ ๋ฌธ์ ๋ฅผ ํธ๋ ํ๋ จ์ ํด์ผ๊ฒ ๋ค.
'๐ป DEV > ใด problems' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] 2020 KAKAO BLIND RECRUITMENT : ๋ฌธ์์ด ์์ถ (0) | 2021.10.09 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] 2018 KAKAO BLIND RECRUITMENT : ํ๋ ์ฆ4๋ธ๋ก (0) | 2021.10.06 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํ : ์ด์ค์ฐ์ ์์ํ (0) | 2021.07.13 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํด์ : ๋ฒ ์คํธ์จ๋ฒ (0) | 2021.07.13 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํ : ๋์คํฌ ์ปจํธ๋กค๋ฌ (0) | 2021.07.13 |
๋๊ธ