반응형
https://programmers.co.kr/learn/courses/30/lessons/43163
본 문제는 프로그래머스 level 3 문제로 DFS 문제다. 개인적인 생각으론 프로그래머스는 BFS 보다 DFS를 이용하여 풀었을 때 코드가 간결하고 쉽게 풀리는거 같다. 최단 거리를 구하는 문제는 BFS를 사용하는게 빠르지만 이 문제는 DFS를 이용하였고 target에 도착할 때 마다 값을 비교하여 최솟값을 구하였다.
자세한 설명은 주석처리 하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include <string>
#include <vector>
using namespace std;
// 문제에서 words의 길이가 최대 50이므로 50이하의 정답이 나온다.
int ans = 50;
void dfs(string start, string target, vector<string> words, vector<bool> chk, int cnt) {
// target에 도착하였을 경우 최솟값 비교
if (start == target) {
if (ans > cnt) ans = cnt;
return;
}
for (int i = 0; i < words.size(); i++) {
if (chk[i]) continue;
int count = 0;
for (int j = 0; j < start.size(); j++) {
if (start[j] == words[i][j]) count += 1;
}
// 글자가 1개 차이날 경우 DFS
if (count == start.size()-1) {
chk[i] = true;
dfs(words[i], target, words, chk, cnt + 1);
}
}
}
int solution(string begin, string target, vector<string> words) {
// target이 words에 없는 경우 확인하기
bool flag = false;
for (int i = 0; i < words.size(); i++) {
if (target == words[i]) flag = true;
}
if (!flag) return 0;
else {
vector<bool> chk(words.size(), false);
dfs(begin, target, words, chk, 0);
return ans;
}
}
|
cs |
반응형
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 2019 카카오 개발자 겨울 인턴십 - 튜플, C++ (0) | 2020.05.01 |
---|---|
[프로그래머스] 2019 카카오 개발자 겨울 인턴십 - 크레인 인형뽑기 게임, C++ (0) | 2020.05.01 |
[프로그래머스] level 3 - 보행자 천국, C++ (0) | 2020.03.26 |
[프로그래머스] level 3 - 여행경로, C++ (0) | 2020.03.26 |
[프로그래머스] 2020 KAKAO BLIND RECRUITMENT - 자물쇠와 열쇠, C++ (0) | 2020.03.24 |
댓글