여행경로

108번뇌·2021년 10월 15일
0

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];
	});
profile
내일 아침 눈을 떳을 때, '기대되는 오늘 하루를 만들기 위해' 나는 오늘도 생각하고 고민한다.

0개의 댓글