개발/알고리즘

프로그래머스 여행경로 C++

daisy-day 2021. 2. 7. 20:54

문제

programmers.co.kr/learn/courses/30/lessons/43164

 

코딩테스트 연습 - 여행경로

[[ICN, SFO], [ICN, ATL], [SFO, ATL], [ATL, ICN], [ATL,SFO]] [ICN, ATL, ICN, SFO, ATL, SFO]

programmers.co.kr

코드

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

bool visited[10001];
vector<string> answer;
int max_count;

void dfs(vector<vector<string>> tickets, vector<string> tmp, string start, int count)
{
    tmp.push_back(start);
    
    if(max_count < count)
    {
        max_count = count;
        answer = tmp;
    }
    
    for(int i = 0; i < tickets.size(); i++)
    {
        if(tickets[i][0] == start && visited[i] == false)
        {
            visited[i] = true;
            dfs(tickets, tmp, tickets[i][1], count + 1);
            visited[i] = false;
        }
    }
    
    tmp.pop_back();
}

vector<string> solution(vector<vector<string>> tickets) {
    sort(tickets.begin(), tickets.end());
    vector<string> tmp;
    
    dfs(tickets, tmp, "ICN", 0);
    
    return answer;
}