반응형
https://programmers.co.kr/learn/courses/30/lessons/84512
조합 + 정렬문제였습니다.
📕 풀이방법
📔 입력 및 초기화
나올 수 있는 모든 형태의 문자열을 저장하기 위한 vector변수 dictionary를 선언합니다.
📔 풀이과정
1. 나올 수 있는 모든 문자열을 dictionary에 push해줍니다.
2. 자리마다 확인하며 사전상 앞에 오는 문자 순으로, 자리수에 대한 오름차순으로 정렬해줍니다.
3. dictionary를 순회하며 단어를 찾았다면 해당 index + 1을 반환합니다.
📕 Code
#include <bits/stdc++.h>
using namespace std;
vector <string> dictionary;
string allChar = "AEIOU";
map <string,int> m;
bool cmp(string a, string b){
for(int i = 0; i < a.size(); i++)
if(a[i] < b[i] && i < b.size())
return a[i] < b[i];
return (int)a.size() < (int)b.size();
}
void dfs(int depth, string word, int limit){
if(depth == limit){
m[word] = 1;
return;
}
for(int i = 0; i < 5; i++) dfs(depth + 1, word + allChar[i], limit);
}
int solution(string word) {
int answer = 1;
dictionary.clear();
m.clear();
for(int i = 1; i <= 5; i++)
dfs(0,"",i);
for(auto el : m) dictionary.push_back(el.first);
for(auto d : dictionary) {
if(d == word) return answer;
answer++;
}
}
'Algorithm > DFS' 카테고리의 다른 글
(C++) - 백준(BOJ) 17070 : 파이프 옮기기 1 (0) | 2021.10.21 |
---|---|
(C++) - 백준(BOJ) 1595번 : 북쪽나라의 도로 (0) | 2021.09.24 |
(C++) - 백준(BOJ) 17478번 : 재귀함수가 뭔가요? (0) | 2021.08.23 |
(C++) - 백준(BOJ) 20166번 : 문자열 지옥에 빠진 호석 (0) | 2021.08.17 |
(C++) - 백준(BOJ) 5568번 : 카드놓기 (0) | 2021.07.09 |