문제링크: https://programmers.co.kr/learn/courses/30/lessons/43163
문제설명
대상 단어(begin)를 목적단어(target)로 바꾸는것이 목표.
begin, target, 단어목록 이 주어지고 단어는 단어목록에 있는 단어로 한번에 하나씩 만 변경가능
begin 단어가 target 단어로 변하는 최소값을 return
알고리즘
DFS를 이용하여 단어 목록에서 한글자 가 다른 경우를 찾아서 변환 ->변환->...-> 타겟 도착-> answer 업데이트 이방법 을 반복
코드
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
52
|
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int use[1000];
int answer = 1000;
void DFS(string begin, string target, vector<string>words, int count) {
int len = begin.length();
int size = words.size();
for (int i = 0; i < size; i++) {
//이미사용한 문자면은 SKIP
if (use[i])continue;
string word = words[i];
int cnt = 0;
//글자가 다른 갯수를 센다 .
for (int j = 0; j < len; j++) {
if (word[j] != begin[j])cnt++;
}
//단어가 한글자만 다르다면
if (cnt == 1) {
//단어 변환 끝
if (word == target) {
answer = min(count + 1, answer);
return;
}
use[i] = 1;
DFS(words[i], target, words, count + 1);
use[i] = 0;//백트래킹
}
}
}
int solution(string begin, string target, vector<string> words) {
DFS(begin, target, words, 0);
if (answer == 1000) return 0;
return answer;
}
|
cs |
'c++ > 프로그래머스' 카테고리의 다른 글
프로그래머스 :정수 삼각형 (0) | 2020.04.02 |
---|---|
프로그래머스 : 타일 장식물 (0) | 2020.04.02 |
프로그래머스 : 네트워크 (0) | 2020.04.02 |
프로그래머스 : 타겟넘버 (0) | 2020.04.01 |
프로그래머스 : k번째수 (0) | 2020.03.27 |