๐ ๋ฌธ์
๋ ๊ฐ์ ๋จ์ด 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 ํฉ๋๋ค.
์ ์ถ๋ ฅ ์
| "hit" | "cog" | ["hot", "dot", "dog", "lot", "log", "cog"] | 4 |
| "hit" | "cog" | ["hot", "dot", "dog", "lot", "log"] | 0 |
โ๏ธ ํ์ด
์ ํ ์ฌํญ์ ๋ณด์์ ๋, ๋จ์ด์ ๊ฐ์๊ฐ 50๊ฐ๋ฅผ ๋์ง ์๊ณ ๋จ์ด์ ๊ธธ์ด๊ฐ 10์ดํ์๊ธฐ ๋๋ฌธ์ DFS๋ก ํ์ด๋ ๊ด์ฐฎ์ ๊ฒ์ด๋ผ ์๊ฐํ๋ค.
์ด๋ฏธ ๋ฐฉ๋ฌธํ ๊ณณ์ ์ฒ๋ฆฌํ ๋์๋ ๋ฐฐ์ด์ ์๋ฅด๊ณ ์ด์ด๋ถ์ด๊ธฐ ๋ณด๋ค๋ ๋จ์ด์ ๊ธธ์ด๊ฐ ๋ฌด์กฐ๊ฑด 3์ด์์ด๋ฏ๋ก ''๋ก ๋น ๋ฌธ์์ด๋ก ๋ณํํ ๋ค์ ๋ฐ๋ณต๋ฌธ ๋ด์์ ๋น ๋ฌธ์์ด์ผ๋ continue๋ฅผ ์ด์ฉํ์ฌ ๋๊ฒจ์ฃผ๋ฉด ๋๊ฒ ๋ค๋ ์๊ฐ์ ํ๋ค.
๋จ์ด๋ฅผ ํ๋์ฉ ๋ณ๊ฒฝํ ์ ์๊ธฐ ๋๋ฌธ์ ํ์ฌ ๋จ์ด์ target ๋จ์ด ์ฌ์ด์ ์ํ๋ฒณ ์ฐจ์ด ๊ฐ์๋ฅผ ํ์ธํด์ผ ํ๋๋ฐ split๊ณผ reduce๋ฅผ ์ฌ์ฉํ์ฌ ํ์ธํ๋ค. ์ด๋ ์ฐจ์ด๋๋ ์ํ๋ฒณ ๊ฐ์์ ์๊ฐ 1์ธ ๊ฒฝ์ฐ ํ์ฌ ๋ฌธ์๋ฅผ ๋ณ๊ฒฝํ๊ณ words ๋ฐฐ์ด์์ ํด๋น ๋จ์ด๋ฅผ ๋น ๋ฌธ์์ด๋ก ๋ณ๊ฒฝํ ๋ค์ ํ์ฌ ๋จ์ด์ ์๋ก์ด ๋จ์ด๋ฐฐ์ด, cnt๋ฅผ ๋๊ฒจ์ฃผ๋ฉฐ ์ฌ๊ท๋ก ๋๋ ค์คฌ๋ค.
dfs ํจ์ ์ด๊ธฐ์๋ ํ์ฌ ๋จ์ด์ target ๋จ์ด๋ฅผ ํ์ธํ์ฌ ๊ฐ๋ค๋ฉด ํ์ฌ cnt๋ฅผ answer์ ๋น๊ตํ์ฌ answer๋ฅผ ์ต์ ํ ์์ผ์ฃผ์๋ค.
๋ํ, ๋จ์ด ๋ฐฐ์ด์ target์ด ์๋ ๊ฒฝ์ฐ ๋ณํํ ์ ์๋ ์ํฉ์ด๊ธฐ ๋๋ฌธ์ solution ํจ์ ๋ด ์ฒ์์ filter๋ฅผ ์ฌ์ฉํ์ฌ ํ์ธํ๊ณ ํฌํจ๋์ง ์๋ ๊ฒฝ์ฐ์ 0์ ๋ฐํํ๋ค.
โจ๏ธ ์ฝ๋
function solution(begin, target, words) {
var answer = Infinity;
const validation = words.filter(word => word === target);
if (!validation.length) return 0;
const dfs = (now, words, cnt) => {
if (target === now) {
answer = Math.min(answer, cnt);
return;
}
for (let i = 0; i < words.length; i++) {
const word = words[i];
if (!word) continue;
const diffCnt = word.split('').reduce((n, w, i) => n + (w === now[i] ? 0 : 1), 0);
if (diffCnt === 1) {
const nextWords = [...words];
nextWords[i] = '';
dfs(word, nextWords, cnt + 1);
}
}
};
dfs(begin, words, 0);
return answer;
}
console.log(solution('hit', 'cog', ['hot', 'dot', 'dog', 'lot', 'log', 'cog']));'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Algorithm] ์ด์ค์ฐ์ ์์ ํ (0) | 2023.02.25 |
|---|---|
| [Algorithm] ์ผ๊ทผ ์ง์ (0) | 2023.02.24 |
| [Algorithm] ์ฌํ๊ฒฝ๋ก (0) | 2023.02.23 |
| [Algorithm] ๊ธฐ์ง๊ตญ์ค์น (0) | 2023.02.22 |
| [Algorithm] ๊ฐ์ฅ ๊ธด ํฐ๋ฆฐ๋๋กฌ (0) | 2023.02.22 |