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

using namespace std;

vector<string> answer;
int visit[10001];

bool dfs(string cur, vector<vector<string>> &tickets, int cnt) {
    answer.push_back(cur);

    if (cnt == tickets.size()) {
        return true;
    }

    for (int i = 0; i < tickets.size(); i++) {
        if (!visit[i] && tickets[i][0] == cur) {
            visit[i] = true;
            int success = dfs(tickets[i][1], tickets, cnt + 1);
            if (success) { //cnt == size일 경우
                return true;
            }
            //경로를 다 못도는 경우, 경로에 포함시키기 위함
            visit[i] = false;
            answer.pop_back();
        }
    }
    return false;
}

vector<string> solution(vector<vector<string>> tickets) {
    sort(tickets.begin(), tickets.end()); //가능한 경로 2개 이상일 경우 알파벳 순서 앞서게
    dfs("ICN", tickets, 0);
    return answer;
}

int main() {
    vector<vector<string>> tickets = {{"ICN", "SFO"},
                                      {"ICN", "ATL"},
                                      {"SFO", "ATL"},
                                      {"ATL", "ICN"},
                                      {"ATL", "SFO"}};
    vector<string> result = solution(tickets);

    cout << "\n----" << endl;
    for (auto &i: result) {
        cout << i << " ";
    }
    return 0;
}

'⚖️Algorithm' 카테고리의 다른 글

[코딩테스트] 알고리즘 정리  (0) 2022.10.22
[SQL] 코딩테스트 준비  (0) 2022.10.20
[java] 지식  (0) 2022.09.23
[백준 20056] 마법사 상어와 파이어볼  (0) 2022.08.28
[백준 1202] 보석 도둑  (0) 2022.08.22

+ Recent posts