728x90
문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/43163#
KEY
- 두 문자열의 요소가 1개만 다른지 확인하는 함수를 따로 작성했다.
- 처음에 방문 배열(visited)를 사용하지 않고 DFS로 풀이했는데, 테스트케이스 3번에서 시간초과가 발생했다.
- 결국 visited를 사용하여 방문했던 노드를 탐색하지 않는 과정을 추가
Code
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
42
43
44
45
46
47
48
49
50
51
|
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
const int MAX = 51;
int answer = 999999999;
bool visited[MAX];
bool check(string s1, string s2){ //두 문자열의 요소가 1개만 다른지 판별하는 함수
int diff = 0;
for(int i=0;i<s1.size();i++){
if(s1[i] != s2[i]){
diff++;
}
}
if(diff == 1){
return true;
}else{
return false;
}
}
void dfs(string s, string target, int cnt, vector<string> words){
if(cnt == words.size()) //종료조건1: words배열을 다 돌았을 경우
return;
if(s == target){ //종료조건2: target에 도달했을 때
answer = min(answer, cnt);
return;
}
for(int i=0;i<words.size();i++){
if(visited[i]) //방문했다면 넘어감
continue;
if(check(s,words[i])){ //방문하지 않고, 두 문자열의 요소가 1개만 다르다면
visited[i] = true;
dfs(words[i], target, cnt+1, words);
}
}
}
int solution(string begin, string target, vector<string> words) {
dfs(begin, target, 0, words);
if(answer == 999999999)
return 0;
else
return answer;
}
|
cs |
728x90
'Algorithm > BFS DFS' 카테고리의 다른 글
[백준] 16953 A->B c++ (0) | 2023.03.13 |
---|---|
[백준] 2644 촌수계산 c++ (0) | 2023.03.12 |
[백준] 1389 케빈 베이컨의 6단계 법칙 c++ (0) | 2023.03.10 |
[백준] 2583 영역 구하기 c++ (0) | 2023.03.02 |
[백준] 11725 트리의 부모 찾기 c++ (0) | 2023.03.02 |
댓글