๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/3๋‹จ๊ณ„

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv3] : ์—ฌํ–‰๊ฒฝ๋กœ

by Jaeguk 2022. 6. 20.
๋ฌธ์ œ ๋งํฌ

https://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

๋น„ํ–‰๊ธฐ ํ‘œ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ๋ชจ๋“  ํ‘œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์—ฌํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๋ฌธ์ œ.

 

ํ’€์ด

 ๊ฐ๊ฐ์˜ ๊ณตํ•ญ์„ ๋…ธ๋“œ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์„ ๋•Œ ๊ณตํ•ญ i์—์„œ j๋กœ ๊ฐ€๋Š” ํ‘œ๊ฐ€ ์žˆ์œผ๋ฉด i์™€ j ์‚ฌ์ด์— ๊ฐ„์„ ์ด ์กด์žฌํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

ICN ๊ณตํ•ญ์„ ์‹œ์ž‘ ๋…ธ๋“œ๋กœ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค๋กœ ์ด๋™ํ•ด์„œ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•  ๋•Œ๊นŒ์ง€ ์ด๋™ํ•œ๋‹ค.

๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ–ˆ์„ ๋•Œ ๊ทธ๋•Œ๊นŒ์ง€์˜ ๋ฐฉ๋ฌธ ๊ฒฝ๋กœ๋ฅผ answer ๋ฒกํ„ฐ์— ๋‹ด์•„์„œ ๋ฆฌํ„ดํ•œ๋‹ค.

 

ํ•˜์ง€๋งŒ ๋ฌธ์ œ ์กฐ๊ฑด์— ๋ณด๋ฉด

๋งŒ์ผ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ๊ฐ€ 2๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๊ฐ€ ์•ž์„œ๋Š” ๊ฒฝ๋กœ๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.

๋ผ๋Š” ์กฐ๊ฑด์ด ์žˆ๋‹ค.

๊ฒฝ๋กœ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ผ ๊ฒฝ์šฐ ์‚ฌ์ „์ˆœ์œผ๋กœ ์•ž์„œ๋Š” ๊ฒฝ๋กœ๋ฅผ ๋ฆฌํ„ดํ•ด์•ผํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ๋ชจ์•„์„œ, ์ •๋ ฌํ•œ ํ›„ ์ œ์ผ ์•ž์—์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๋ฐฉ์‹์„ ์„ ํƒํ–ˆ๋‹ค.

๋ชจ๋“  ๊ฒฝ์šฐ์˜์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉด์„œ

1. ๊ฒฝ๋กœ๋ฅผ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ํ•ฉ์นœ๋‹ค. ๋งŒ์•ฝ ICN -> JFK -> HND ๋ฉด "ICNJFKHND" ์ด๋ ‡๊ฒŒ

2. ๊ฒฝ๋กœ๋ฅผ ๋ชจ๋‘ vector<string> all_route ๋ฒกํ„ฐ์— ์ €์žฅํ•œ๋‹ค.

3. ๋ฒกํ„ฐ๋ฅผ ์ •๋ ฌํ•œ๋‹ค.

4. 0๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ๋ฌธ์ž์—ด์„ 3๊ธ€์ž์”ฉ ์ชผ๊ฐœ์„œ answer ๋ฒกํ„ฐ์— ๋„ฃ๋Š”๋‹ค.

 

์ฝ”๋“œ ์ž‘์„ฑ
 
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
const int MAX_N = 10000 + 5;
bool visited[MAX_N];
vector<string> all_route;
 
void dfs(int depth, string now, vector<vector<string>> tickets, string result){
    if(depth == tickets.size()){
        all_route.push_back(result);
        return;
    }
    for(int i = 0; i<tickets.size(); i++){
        if(!visited[i] && tickets[i][0== now){
            visited[i] = true;
            dfs(depth + 1, tickets[i][1], tickets, result + tickets[i][1]);
            visited[i] = false;
        }
    }
}
void get_answer(string ans, vector<string> & answer){
    for(int i = 0; i<ans.length(); i+=3)
        answer.push_back(ans.substr(i,3));
}
vector<string> solution(vector<vector<string>> tickets) {
    vector<string> answer;
    dfs(0"ICN", tickets, "ICN");
    sort(all_route.begin(), all_route.end());
    get_answer(all_route[0], answer);
    return answer;
}
cs

 

์—ฌ๊ธฐ์„œ ๊ตณ์ด ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ๋ฒกํ„ฐ์— ์ €์žฅํ•ด์ง€ ์•Š๊ณ  ๊ทธ๋•Œ ๊ทธ๋•Œ ๋น„๊ต๋ฅผ ํ†ตํ•ด์„œ ์‚ฌ์ „์ˆœ์œผ๋กœ ์•ž์„œ๋Š” ๊ฒฝ๋กœ๋กœ ๊ฐฑ์‹ ํ•ด์ฃผ๋Š” ๊ฒƒ๋„ ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•์ธ ๋“ฏํ•˜๋‹ค.

<, > ์—ฐ์‚ฐ์ž๋ฅผ ์จ์„œ ๋ฌธ์ž์—ด์„ ์‚ฌ์ „์ˆœ์„ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค.

728x90