[Programmers] 여행경로
Date:
[Programmers] 여행경로
Problem URL : 여행경로
#include <string>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
map<string, vector<string>> m;
map<string, vector<bool>> visit;
int nums;
vector<string> route;
bool dfs(int idx) {
if(idx == nums) return true;
string now = route[idx];
vector<string> tmp = m[now];
for(int i = 0; i < tmp.size(); i++) { //[1]
if(visit[now][i]) continue;
visit[now][i] = true;
route.push_back(tmp[i]);
if(dfs(idx + 1)) {
return true;
}
route.pop_back();
visit[now][i] = false;
}
return false;
}
vector<string> solution(vector<vector<string>> tickets) {
sort(tickets.begin(), tickets.end());
nums = tickets.size();
string start = tickets[0][0];
vector<string> ends;
ends.push_back(tickets[0][1]);
for(int i = 1; i < nums; i++) {
if(start != tickets[i][0]) {
m[start] = ends;
int len = ends.size();
vector<bool> tmp(len, false);
visit[start] = tmp;
ends.clear();
start = tickets[i][0];
}
ends.push_back(tickets[i][1]);
}
m[start] = ends;
int len = ends.size();
vector<bool> tmp(len, false);
visit[start] = tmp;
route.push_back("ICN");
dfs(0);
return route;
}
Comments
map을 사용하지 않고 [1] 전체 ticket 목록을 탐색하는 방법도 있다.
그 방법이 코드 짜기는 더 편하지만, ticket 목록이 커질 수록
map을 사용해주는게 효율이 2배는 좋아지는 거 같다.
댓글