๋ฌธ์ ๋งํฌ
https://programmers.co.kr/learn/courses/30/lessons/43163
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ๋จ์ด ๋ณํ
๋ ๊ฐ์ ๋จ์ด begin, target๊ณผ ๋จ์ด์ ์งํฉ words๊ฐ ์์ต๋๋ค. ์๋์ ๊ฐ์ ๊ท์น์ ์ด์ฉํ์ฌ begin์์ target์ผ๋ก ๋ณํํ๋ ๊ฐ์ฅ ์งง์ ๋ณํ ๊ณผ์ ์ ์ฐพ์ผ๋ ค๊ณ ํฉ๋๋ค. 1. ํ ๋ฒ์ ํ ๊ฐ์ ์ํ๋ฒณ๋ง ๋ฐ๊ฟ ์
programmers.co.kr
๋ ๊ฐ์ ๋จ์ด begin, target์ด ์ฃผ์ด์ก์ ๋, begin ๋จ์ด๋ฅผ ๋ณํํด์ target ๋จ์ด๊ฐ ๋ ์ ์๋์ง ํ๋ณํด๋ณด๊ณ ๊ฐ๋ฅํ๋ค๋ฉด ์ต์ ๋ช๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ผํ๋์ง ๋ฆฌํดํ๋ ๋ฌธ์ .
ํ์ด
1. ํ ๋ฒ์ ํ ๊ฐ์ ์ํ๋ฒณ๋ง ๋ฐ๊ฟ ์ ์์ต๋๋ค.
2. words์ ์๋ ๋จ์ด๋ก๋ง ๋ณํํ ์ ์์ต๋๋ค.โ
๋จ์ด๋ฅผ ๋ณํํ ์ ์๋ ์กฐ๊ฑด์ ์์ ๊ฐ๋ค.
์ฆ, ํ์ฌ ๋จ์ด๋ฅผ now๋ผ๊ณ ํ์ ๋ words์ ์๋ ๋จ์ด๋ค ์ค์ now์ ์ํ๋ฒณ ํ๋๋ง ๋ค๋ฅธ ๋จ์ด๋ก ๋ณํ์ด ๊ฐ๋ฅํ๋ค.
DFS๋ฅผ ์ด์ฉํด์ ๋ฌธ์ ๋ฅผ ํ์๋ค.
DFS์ ๊น์ด๋ฅผ depth๋ผ๊ณ ํ์ ๋ depth๋ ๋จ์ด์ ๋ณํ ํ์์ ๊ฐ๋ค.
๊ทธ๋ฌ๋ฏ๋ก ์ต๋ ๊น์ด๋ words.size()์ ๊ฐ๋ค. depth์ words.size()๊ฐ ๊ฐ์์ก๋ค๋ ๊ฑด words์ ์๋ ๋ชจ๋ ๋จ์ด๋ค์ ์ด์ฉํด์ ๋ณํ์ ํ๋ค๋ ๋ป์ด๋ค. ์ด๋ ์ฐ๋ฆฌ๋ 2๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณผ ์ ์๋ค.
1. ํ์ฌ ๋จ์ด์์ target์ผ๋ก ๋ณํ์ด ๊ฐ๋ฅํ๋ค.
2. ํ์ฌ ๋จ์ด์์ target์ผ๋ก ๋ณํ์ด ๋ถ๊ฐ๋ฅํ๋ค.
1๋ฒ์ ๊ฒฝ์ฐ์๋ depth๊ฐ ์ต์ ๋ณํํ์์ธ์ง ํ๋ณํด์ answer๊ฐ์ ๊ฐฑ์ ํด์ฃผ๊ณ , 2๋ฒ์ ๊ฒฝ์ฐ๋ผ๋ฉด ๊ทธ๋ฅ ๋ฆฌํดํ๋ค.
๋ง์ฝ depth๊ฐ words.size()๊ฐ ๋๊ธฐ ์ ์ ์ฆ words์ ์๋ ๋ชจ๋ ๋จ์ด๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ target์ ๋ง๋ค ์ ์์ผ๋ฉด ์ด๋์ ๋ณํํ์๊ฐ ์ต์์ธ์ง ํ๋ณํ๊ณ ์ต์๋ผ๋ฉด answer๊ฐ์ ๊ฐฑ์ ํ ๋ค ๋ฆฌํด ์๋๋ฉด ๊ทธ๋ฅ ๋ฆฌํด.
๊ทธ๋ฆฌ๊ณ ์ด๋ฏธ ๋ณํํ๋ ๋จ์ด๋ก ๊ตณ์ด ๋ค์ ๋ณํํ ํ์๊ฐ ์๋ค. ๊ทธ๋์ visited ๋ฐฐ์ด์ ๋ง๋ค์ด์ ๋ณํํ๋ ๋จ์ด๋ก ๋ค์ ๋ณํํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ค.
์ฝ๋ ์์ฑ
|
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
const int MAX_N = 50 + 5;
bool visited[MAX_N];
void backtracking(int depth, string now, string target, vector<string> words, int &answer){
if(depth == words.size()){
if(now == target){
answer = min(answer,depth);
}
return;
}
if(now == target){
answer = min(answer, depth);
return;
}
for(int i = 0; i<words.size(); i++){
int cnt = 0;
for(int j = 0; j<words[i].length(); j++)
if(now[j] != words[i][j])
cnt++;
if(cnt == 1 && !visited[i]){
visited[i] = true;
backtracking(depth + 1, words[i], target, words, answer);
visited[i] = false;
}
}
}
int solution(string begin, string target, vector<string> words) {
int answer = 100;
backtracking(0, begin, target, words, answer);
if(answer == 100)
return 0;
return answer;
}
|
cs |
'ํ๋ก๊ทธ๋๋จธ์ค > 3๋จ๊ณ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค Lv3] : ์ ๊ตญ์ฌ์ฌ (0) | 2022.06.21 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค Lv3] : ์์ (0) | 2022.06.20 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv3] : ์ฌํ๊ฒฝ๋ก (0) | 2022.06.20 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv3] : ๋คํธ์ํฌ (0) | 2022.06.20 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv3] : ๋ฒ ์คํธ์จ๋ฒ (0) | 2022.06.14 |