티스토리 뷰
https://programmers.co.kr/learn/courses/30/lessons/84512
코딩테스트 연습 - 5주차
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니
programmers.co.kr
#include <string>
#include <vector>
#define MAX 5
using namespace std;
char aeiou[MAX]={'A','E','I','O','U'};
char selected[MAX];
int answer;
int order=0;
void dfs(int cnt, string s, string word){
if (s==word){
answer=order;
return;
}
if (cnt==5){
return;
}
for (int i=0; i<MAX; i++){
selected[cnt]=aeiou[i];
s+=selected[cnt];
order++;
dfs(cnt+1,s,word);
s.pop_back();
}
}
int solution(string word) {
dfs(0,"",word);
return answer;
}
DFS, 중복순열을 이용해서 풀었다.
재귀에 약하기 때문에 순열, 조합에 대한 DFS 지식을 충분히 익혀야겠다.
selected 배열에 선택된 애들을 넣어주고(A,E,I,O,U 순서대로), 순서를 나타내는 Order 변수를 1 증가시킨다.
DFS를 재귀적으로 수행하고, DFS 가 다 돌려지면 선택된 애들을 빼준다.
cnt가 5(총 글자 수가 5)이거나 word와 동일할 때 탐색을 멈춘다.
'Problem Solving' 카테고리의 다른 글
[프로그래머스] 카카오프렌즈 컬러링북 (C++) (0) | 2021.09.14 |
---|---|
[프로그래머스] 합승 택시 요금 (C++) (0) | 2021.09.01 |
[프로그래머스] 추석 트래픽 (C++) (0) | 2021.08.31 |
[프로그래머스] 오픈채팅방 (C++) (0) | 2021.08.30 |
[프로그래머스] 문자열 압축 (C++) (0) | 2021.08.30 |