본문 바로가기
Algorithm/Programmers

[Lv.3] 여행경로

by 어발 2024. 5. 20.

출처. 프로그래머스

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

기본적인 DFS 방식으로 풀면 된다.

ICN로 시작해서 모두 방문할 수 있는 경로를 저장한다.

그 이후에 알파벳 순서가 가장 빠른것이 정답이다.

아래 코드의 주석 참고~

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

using namespace std;

bool visitable[10000];
vector<vector<string>> answerList; // 경로를 저장하는 경로 리스트
size_t totalSize = 0;

void DFS(vector<vector<string>>& ticket, vector<string>& answer) {
    if (answer.size() == totalSize+1) { // 항공권 탐색이 다 끝났다면, 경로를 경로리스트에 저장
        answerList.push_back(answer);
        return;
    }
    
    for (size_t idx = 0 ; idx < totalSize ; idx++) {
        if (answer.back() == ticket[idx][0] && visitable[idx]) { // 경로 마지막과 항공권의 시작을 비교하고 방문 가능한지 확인
            answer.push_back(ticket[idx][1]); // 경로에 항공권의 도착지를 설정
            visitable[idx] = false; // 한번 방문했으니 방문 여부를 false로 설정
            DFS(ticket, answer);
            answer.pop_back();
            visitable[idx] = true; 
        }
    }
}

vector<string> solution(vector<vector<string>> tickets) {
    totalSize = tickets.size();
    
    for (size_t i = 0 ; i < totalSize ; i++) {
        visitable[i] = true;
    }
    
    vector<string> answer{"ICN"}; // 시작위치는 ICN로 설정
    
    DFS(tickets, answer);
    
    sort(answerList.begin(), answerList.end()); // 경로가 담긴 List를 오름차순으로 정렬
        
    return answerList[0];
}
728x90

'Algorithm > Programmers' 카테고리의 다른 글

[Lv.3] 타겟 넘버  (0) 2024.05.20
[Lv.3] 아이템 줍기  (0) 2024.05.20
[Lv.3] 단어 변환  (0) 2024.04.10
[Lv.3] 네트워크  (0) 2024.04.09
[Lv.2] 게임 맵 최단거리  (1) 2024.04.07

댓글