- ๋ฐฑ์ค
- C++
- ํธ๋ฆฌ
- ๋นํธ๋งต
- js
- ํ๋ก๊ทธ๋๋จธ์ค
- ์น๋ฆฐ์ด
- ๋ค์ต์คํธ๋ผ
- ์ฌ๊ท
- Union-Find
- ํ๋ฆฌ์จ๋ณด๋ฉ
- LCs
- go
- ์ด๋ถํ์
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- ์๊ณ ๋ฆฌ์ฆ
- DP
- nestjs
- ์์ฝ๋
- ์นด์นด์ค2021
- ์นด์นด์ค ์ฝํ
- ์ํฐ๋
- Python
- ๋นํธ๋ง์คํน
- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
- BFS
- golang
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- DFS
- Today
- Total
Hello Ocean! ๐ผ
[C++/ํ๋ก๊ทธ๋๋จธ์ค] ๋จ์ด ๋ณํ ๋ณธ๋ฌธ
๋ฌธ์
https://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 |
ํ์ด
๋จ์ด์ ๊ธธ์ด๊ฐ 10์ดํ์ด๊ณ ,
์ด ๋จ์ด์ ๊ฐ์๋ 50๊ฐ ์ดํ์ด๋ฏ๋ก ์๊ฐ๋ณต์ก๋๊ฐ ๋๋ํ๋ค๊ณ ์๊ฐํ๋ค.
BFS๋ฐฉ์์ผ๋ก ํ์ดํ์ผ๋ฉฐ,
words ๊ธธ์ด๋งํผ visited ๋ฐฐ์ด์ ๋ง๋ค์ด ์ด์ฉํ๋ค.
๋ฌธ์ ๋ ๊ธธ์์ง๋ง, ๊ผฌ์ง ์์? ๋ฌธ์ ์ฌ์ ์ ํํ๋ ํ์ด๋ก ํ ์ ์์๋ค.
์ฝ๋
#include <string>
#include <vector>
#include <queue>
using namespace std;
bool isCanConvert(string begin, string target) {
int count = 0;
for(int i=0;i<begin.size();i++)
if (begin[i] != target[i]) count++;
return count <= 1;
}
int BFS(string begin, string target, vector<string> words) {
vector<bool> visited(words.size());
queue<pair<string, int>> q;
q.push({begin, 0});
while(!q.empty()) {
string temp = q.front().first;
int count = q.front().second;
q.pop();
for(int i=0; i<words.size();i++) {
if (visited[i]) continue;
if (!isCanConvert(temp, words[i])) continue;
if (words[i] == target) return count + 1;
visited[i] = 1;
q.push({words[i], count + 1});
}
}
return 0;
}
int solution(string begin, string target, vector<string> words) {
int answer = 0;
answer = BFS(begin, target, words);
return answer;
}
๊ฒฐ๊ณผ
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[go/ํ๋ก๊ทธ๋๋จธ์ค] ์ฌ ์ฐ๊ฒฐํ๊ธฐ (0) | 2022.02.08 |
---|---|
[C++/ํ๋ก๊ทธ๋๋จธ์ค] ๊ฒฝ์ฃผ๋ก ๊ฑด์ค (2020 ์นด์นด์ค ์ธํด์ญ) (0) | 2022.01.18 |
[C++/ํ๋ก๊ทธ๋๋จธ์ค] ๋ณด์ ์ผํ (2020 ์นด์นด์ค ์ธํด์ญ) (0) | 2021.12.30 |
[C++/ํ๋ก๊ทธ๋๋จธ์ค] ๋ถ๋ ์ฌ์ฉ์ (0) | 2021.12.29 |
[ํ๋ก๊ทธ๋๋จธ์ค/C++] ํ ํธ์ง (3) | 2021.12.08 |