https://programmers.co.kr/learn/courses/30/lessons/43164
처음 이 문제 풀 때 틀렸음.
<기존풀이>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool chk[10001] = { false, };
int Depth(0);
vector<string> vAns;
bool dfs(string cur, vector<vector<string>> &tickets, vector<string> &vtempAns, int depth)
{
vtempAns.push_back(cur);
if (Depth == depth)
{
vAns = vtempAns;
return true;
}
for (int i = 0; i < tickets.size(); i++)
{
if (tickets[i][0] == cur && chk[i] == false)
{
chk[i] = true;
dfs(tickets[i][1], tickets, vtempAns, depth + 1);
}
}
}
vector<string> solution(vector<vector<string>> tickets) {
vector<string> answer;
Depth = tickets.size();
string sStart = "ICN";
sort(tickets.begin(), tickets.end(), [](vector<string> a, vector<string> b) {
if (a[0] == b[0])
{
return a[1] < b[1];
}
return a[0] < b[0];
});
dfs(sStart, tickets, answer, 0);
answer = vAns;
return answer;
}
<새풀이>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool chk[10001] = { false, };
int Depth(0);
vector<string> vAns;
bool dfs(string cur, vector<vector<string>> &tickets, vector<string> &vtempAns, int depth)
{
vtempAns.push_back(cur);
if (Depth == depth)
{
vAns = vtempAns;
return true;
}
for (int i = 0; i < tickets.size(); i++)
{
if (tickets[i][0] == cur && chk[i] == false)
{
chk[i] = true;
if (true == dfs(tickets[i][1], tickets, vtempAns, depth + 1))
{
return true;
}
chk[i] = false;
}
}
vtempAns.pop_back();
return false;
}
vector<string> solution(vector<vector<string>> tickets) {
vector<string> answer;
Depth = tickets.size();
string sStart = "ICN";
sort(tickets.begin(), tickets.end(), [](vector<string> a, vector<string> b) {
if (a[0] == b[0])
{
return a[1] < b[1];
}
return a[0] < b[0];
});
dfs(sStart, tickets, answer, 0);
answer = vAns;
return answer;
}
int main()
{
vector<vector<string>> vvTemp = { {"ICN", "A"},{"ICN", "B"},{"B", "ICN"} };
vector<string> vamswer = solution(vvTemp);
return 0;
}
테스트케이스
{"ICN", "A"},{"ICN", "B"},{"B", "ICN"} 이런게 껴들어가져있음.
그리고 2차원 벡터도 정렬이 가능함.
sort(tickets.begin(), tickets.end(), [](vector<string> a, vector<string> b) {
if (a[0] == b[0])
{
return a[1] < b[1];
}
return a[0] < b[0];
});