#include <string>
#include <vector>
#include <algorithm>
using namespace std;
void DFS(vector<vector<int>> vecVecInt, vector<vector<int>>& vecVecAnswer,vector<int> vecInt, int iNumber)
{
// 마지막 번호가 입력되고 또 들어왔다면
if (iNumber == vecVecInt.size())
{
// 해당하는 vec가 또 있을 수 있으니 sort
sort(vecInt.begin(), vecInt.end());
// 배열이 비어 있지 않다면 있는지 확인
if (!vecVecAnswer.empty())
{
for (int i = 0; i < vecVecAnswer.size(); ++i)
{
if (vecVecAnswer[i] == vecInt)
return;
}
}
// 확인 후 없다면 입력
vecVecAnswer.push_back(vecInt);
return;
}
for (int i = 0; i < vecVecInt[iNumber].size(); ++i)
{
// 처음일 경우 확인 없이 바로 입력
if (!iNumber)
{
vecInt[iNumber] = vecVecInt[iNumber][i];
DFS(vecVecInt, vecVecAnswer, vecInt, iNumber + 1);
}
else
{
// 이전에 같은 번호가 있는지 확인
for (int j = 0; j < iNumber; ++j)
{
if (vecInt[j] == vecVecInt[iNumber][i])
break;
// 없다면 입력
else if (j == iNumber - 1)
{
vecInt[iNumber] = vecVecInt[iNumber][i];
DFS(vecVecInt, vecVecAnswer, vecInt, iNumber + 1);
}
}
}
}
}
int solution(vector<string> user_id, vector<string> banned_id)
{
int iStarCount = 0;
// 해당하는 userId의 배열 번호를 넣기 위한 배열
vector<vector<int>> vecVecInt(banned_id.size());
// 해당하는 배열을 사용하기 위한 용도
vector<vector<int>> vecVecAnswer = {};
vector<int> vecSelect(banned_id.size(), -1);
for (int i = 0; i < banned_id.size(); ++i)
{
for (int z = 0; z < user_id.size(); ++z)
{
// 크기가 다를 경우 바로 패스
if (user_id[z].size() != banned_id[i].size())
continue;
for (int j = 0; j < user_id[z].size(); ++j)
{
if (banned_id[i][j] == '*')
{
// 별의 수 체크
++iStarCount;
// 별이고 모든 글씨가 별이 아닐 경우 패스
if (j != user_id[z].size() - 1)
continue;
// 모든 글씨가 별일 경우 입력
else
{
vecVecInt[i].push_back(z);
break;
}
}
// 글이 다르다면 패스
if (user_id[z][j] != banned_id[i][j])
break;
// 마지막까지 같다면 입력
if (j == user_id[z].size() - 1)
vecVecInt[i].push_back(z);
}
}
iStarCount = 0;
}
// 아예 해당하는 게 없다면 조건이 안되므로 패스
for (int i = 0; i < vecVecInt.size(); ++i)
{
if (vecVecInt[i].empty())
return 0;
}
// 하나하나 체크하기
DFS(vecVecInt, vecVecAnswer, vecSelect, 0);
return vecVecAnswer.size();
}
완전탐색해야한다!
'오늘의 알고리즘' 카테고리의 다른 글
[C++]2017 카카오코드 본선 GPS(프로그래머스 3레벨) (0) | 2022.03.21 |
---|---|
[C++]2017 카카오코드 예선 4단 고음(프로그래머스 4레벨) (0) | 2022.03.19 |
[C++]2020 카카오 인턴십 보석 쇼핑(프로그래머스 3레벨) (0) | 2022.03.17 |
[C++]2021 카카오 채용연계형 인턴십표 편집(프로그래머스 3레벨) (0) | 2022.03.16 |
[C++]2018 KAKAO BLIND RECRUITMENT[1차] 셔틀버스(프로그래머스 3레벨) (0) | 2022.03.15 |