https://school.programmers.co.kr/learn/courses/30/lessons/43163
๋ฌธ์ ์ค๋ช
๋ ๊ฐ์ ๋จ์ด 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 ์์ ์๊ธฐ ๋๋ฌธ์ ๋ณํํ ์ ์์ต๋๋ค.
๋ด ํด๋ต
#include <string>
#include <vector>
#include <queue>
using namespace std;
int answer = 0;
vector<bool> checked(50, false);
void DFS(int count, const string& cur, const string& target, const vector<string>& words)
{
for(int i= 0; i< words.size(); ++i)
{
int diffCount = 0;
// words๋ฅผ ํ์ํ๋ฉฐ ๋จ๊ณ๋ฅผ ๊ฑฐ์น์ง ์์ ๊ณณ ์ค
for(int j = 0; j < words[i].size(); ++j)
{
if(cur[j] != words[i][j])
{
if(!checked[i])
++diffCount;
}
}
// cur๊ณผ ๋ค๋ฅธ ๋ฌธ์๊ฐ 1๊ฐ ์กด์ฌํ๋ค๋ฉด (ํ๋ฒ์ ํ๋์ ๋ฌธ์๋ง ๋ฐ๊ฟ ์ ์๊ธฐ ๋๋ฌธ)
if(1 == diffCount)
{
// ํ๊ฒ ๋ฌธ์์ด๊ณผ ๊ฐ๋ค๋ฉด ์ข
๋ฃ
if(words[i] == target)
{
answer = count+1;
return;
}
// ํ๊ฒ ๋ฌธ์์ด๊ณผ ๋ค๋ฅด๋ค๋ฉด words[i] ๋จ๊ณ๋ฅผ ๊ฑฐ์น ๋ค
// ํ์ฌ ๋ฌธ์์ด์ words[i]๋ก ์ค์ ํด ๊ณ์ ํ์
else
{
checked[i] = true;
DFS(count+1, words[i], target, words);
}
}
// cur๊ณผ ๋ค๋ฅธ ๋ฌธ์๊ฐ 1๊ฐ๊ฐ ์๋๋ผ๋ฉด ๊ณ์ ํ์ํ๋ค.
}
}
int solution(string begin, string target, vector<string> words) {
DFS(0, begin, target, words);
return answer;
}
์ฒ์์๋ ์ ์ด ๋ฌธ์ ๊ฐ DFS๋ก ํ ์ ์๋ ๋ฌธ์ ์ธ์ง ์ดํดํ์ง ๋ชปํ๋ค.
๊ทธ๋์ ์์ ํ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ ค๊ณ ํ์ผ๋ ์๊พธ 1~3๊ฐ์ ํ ์คํธ ์ผ์ด์ค์์ ๋ฌธ์ ๊ฐ ํ๋ ธ๋ค.
๋ฌธ์ ๋ฅผ ๋ค์๋ณด๋, words์ ์๋ ๋ฌธ์์ด ์์๋๋ก ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ ๊ฒ์ด ์๋์๋ค!!
2. words์ ์๋ ๋จ์ด๋ก๋ง ๋ณํํ ์ ์์ต๋๋ค.
์ฆ, words์ ์๋ ๋ฌธ์์ด ์ค์ ํ์ฌ ๋ฌธ์์ด๊ณผ 1๊ฐ๋ง ๋ค๋ฅด๋ฉด์ ๋ฐฉ๋ฌธํ์ง ์๋ ๋ฌธ์์ด์ ๋ฐฉ๋ฌธ, ๋ฐฉ๋ฌธ, ๋ฐฉ๋ฌธํ๋ฉด์ ๊ฐ์ฅ ๋นจ๋ฆฌ ๋ชฉํ ๋ฌธ์์ด์๋ง ๋๋ฌํ๋ฉด ๋๋ ๋ฌธ์ ์๋ค!
๊ฒฐ๊ตญ DFS๋ฅผ ์ด์ฉํด ์๋์ ๊ฐ์ ๊ทธ๋ํ๋ฅผ ํ์ํ๋ฉด์ ๊ฐ์ฅ ๋นจ๋ฆฌ Target๊ณผ ๊ฐ์ ๋ฌธ์์ ๋์ฐฉํ๋ ๋จ๊ณ์ ์๋ฅผ ๊ตฌํ๋ฉด ๋๋ค.
'๐ฅ๏ธ Study Note > Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค / level.3 / ์์ดํ ์ค๊ธฐ(C++) (0) | 2023.04.17 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค / level.3 / ์ฌํ๊ฒฝ๋ก(C++) (0) | 2023.04.14 |
ํ๋ก๊ทธ๋๋จธ์ค / level.2 / ๊ฒ์ ๋งต ์ต๋จ๊ฑฐ๋ฆฌ(C++) (0) | 2023.04.11 |
ํ๋ก๊ทธ๋๋จธ์ค / level.3 / ๋คํธ์ํฌ(C++) (0) | 2023.04.10 |
ํ๋ก๊ทธ๋๋จธ์ค / level.2 / ํ๊ฒ ๋๋ฒ(C++) (0) | 2023.04.07 |