되면한다
프로그래머스 - 여행경로(dfs) 본문
https://school.programmers.co.kr/learn/courses/30/lessons/43164#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이 과정
bfs/ dfs 풀이로 안하고, map과 vector<string>형 배열 arr을 이용하여 티켓을 순서대로 따라감 -> 1, 2번 테케 오류
arr["출발지"] = 도착지 A, 도착지 B
[["ICN", "A"], ["A", "B"], ["A", "C"], ["C", "A"], ["B", "D"]] 인 경우에서 오류가 남.
내 풀이법으로는
arr[ICN] = A
arr[A] = B, C
arr[B] = D
arr[C] = A 가 들어있다.
ICN -> A -> C -> A -> B -> D 가 아닌 ICN -> A -> B -> D를 출력하게 된다.
DFS 풀이법
- tickets을 알파벳 순으로 정렬
 - dfs(출발지, 사용한 티켓수)로 정의
- 모든 항공권 다 사용하면 true
 - 항공권 다 사용못했는데 길이 없는 경우, 백트래킹
 
 
#include <bits/stdc++.h>
using namespace std;
vector<vector<string>> _tickets;
vector<string> answer;
bool vis[10002];
bool isFind;
string ans[10002];
void dfs(string st, int cnt)
{
    ans[cnt] = st;
    if(isFind) return;
    if(cnt == _tickets.size())
    {
        isFind = true;
        for(int i = 0; i <= cnt; i++)
        {
            answer.push_back(ans[i]);
        }
        return;
    }
    
    for(int i = 0; i < _tickets.size(); i++)
    {
        if(vis[i]) continue;
        if(_tickets[i][0] == st)
        {
            vis[i] = true;
            dfs(_tickets[i][1], cnt+1);
            vis[i] = false;
             
            
        }
    }
}
vector<string> solution(vector<vector<string>> tickets) {
    
    sort(tickets.begin(), tickets.end());
    _tickets = tickets;
    
    dfs("ICN", 0);
    return answer;
}
'코딩테스트준비' 카테고리의 다른 글
| 파이프 옮기기 1 (1) | 2023.11.19 | 
|---|---|
| 프로그래머스 - 124 나라의 숫자 (구현) (0) | 2023.11.01 | 
| 프로그래머스 SQL (0) | 2023.10.26 | 
| 프로그래머스 - 광물 캐기 (0) | 2023.10.15 | 
| 프로그래머스 - 경주로 건설 (0) | 2023.10.08 | 
			  Comments