# 생각

가능한 경로를 모두 탐색하는 dfs로 해결해 볼 수 있다

 

tmp를 이용하여 항공권을 복사 비교하여

base condition에 탈출할 때만 answer에 저장해준다

 

가능한 경로가 2개 이상일 경우 알파벳 순서가 앞서는 순서로 경로를 return해 줘야하기때문에

sort후 첫 한번만 answer에 저장해주도록 한다

 

 

# 전체 코드

#include <bits/stdc++.h>
using namespace std;

int vis[11111];

void dfs(vector<vector<string>> tickets, vector<string>& answer, int cnt, string cur, vector<string> tmp)
{
	tmp.push_back(cur);
	if (cnt == tickets.size() && answer.empty())
	{	// 가능한 경로가 2개 이상일 경우 한번만 
		answer = tmp;
		return;
	}

	for (int i = 0; i < tickets.size(); i++)
	{
		if (tickets[i][0] == cur and vis[i] == false)
		{
			vis[i] = true;
			dfs(tickets, answer, cnt + 1, tickets[i][1], tmp);
			vis[i] = false;
		}
	}
	tmp.pop_back();
}

void bfs(vector<vector<string>> tickets, vector<string>& answer, string cur, vector<string> tmp)
{
	queue<string> q;
	q.push(cur);

	while (!q.empty())
	{
		auto cur = q.front(); q.pop();
		for (int i = 0; i < tickets.size(); i++)
		{
			string nxt = tickets[i][1];
			if (vis[i] and tickets[i][0] == cur) continue;
			answer.push_back(nxt);
			vis[i] = 1;
			q.push(nxt);
		}
	}
}

vector<string> solution(vector<vector<string>> tickets)
{
	vector<string> answer;

	sort(tickets.begin(), tickets.end());
	vector<string> tmp;
	//dfs(tickets, answer, 0, "ICN", tmp);
	bfs(tickets, answer, "ICN", tmp);

	return answer;
}

 


출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

'Algorithm > 프로그래머스' 카테고리의 다른 글

[Lv.1] K번째수 with cpp  (0) 2022.03.05
[Lv.1] 모의고사 with cpp  (0) 2022.03.05
[Lv.3] 단어 변환 with cpp  (0) 2022.03.04
[Lv.3] 네트워크 with cpp  (0) 2022.03.03
[Lv.2] 타겟 넘버 with cpp  (0) 2022.03.02

+ Recent posts