https://school.programmers.co.kr/learn/courses/30/lessons/43164
์ฃผ์ด์ง ํญ๊ณตํธ์ ๋ชจ๋ ์ฌ์ฉํ๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ผ๋ฉด ๋๋ค. ๊ฒฝ๋ก๊ฐ ์ฌ๋ฌ๊ฐ๋ฉด ์ํ๋ฒณ ์์๊ฐ ๋น ๋ฅธ ๊ฒฝ๋ก ํ๊ฐ๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค.
*ํด๊ฒฐ๋ฒ
์ฃผ์ด์ง ํญ๊ณตํธ์ ๋ชจ๋ ์ฌ์ฉํด์ผ ํ๋ฏ๋ก, ICN๋ถํฐ ์ถ๋ฐ์ง์ -> ๋์ฐฉ์ง์ ์ DFS๋ก ํ์ํ๋ค.
์ด ๋, ๊ฒฝ๋ก๋ฅผ ์ ์ฅํด์ผ ํ๋ฏ๋ก answer ๋ stack(vector) ํ์ ์ ์ถ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค.
๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ์ ์ถ๋ฐ์ง์ ์ผ๋ก ์ง์ ํ ๋ฌธ์์ ๊ฐ์๊ฑธ ์ฐพ๊ณ , ๋์ฐฉ์ง์ ์ ๋ค์ ์ถ๋ฐ์ง์ ์ผ๋ก ์ค์ ํ๋ฉฐ ๋ชจ๋ ํญ๊ณตํธ์ ๋ค ์ฌ์ฉํ ๋๊น์ง ๋ฐ๋ณตํ๋ฉด ๋๋ค. DFS ํ์์ depth ๋ฅผ ๊ฐ์ด ๋ณด๋ด์ ์ต์ depth ์ธ์ง๋ฅผ ํ๋จํด์ผ ํ๋ค.
*์์๋ ๊ฒ
1) ๋ฒกํฐ ์ ์ธ ๋ฐ ์ด๊ธฐํ
vector<bool> isVisited(tickets.size(), false);
2) vector ๊ฐ ๋ฃ๊ณ ๋นผ๊ธฐ
answer.push_back(airport);
answer.pop_back();
*์ฝ๋
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool DFS(string airport, vector<vector<string>> tickets, vector<string> &answer, vector<bool> &isVisited, int ticketCount){
answer.push_back(airport);
if(ticketCount == tickets.size()) return true;
for(int i = 0; i < tickets.size(); i++){
if(tickets[i][0] == airport && !isVisited[i]){
isVisited[i] = true;
if(DFS(tickets[i][1], tickets, answer, isVisited, ticketCount + 1)){
return true;
}
isVisited[i] = false;
}
}
answer.pop_back();
return false;
}
vector<string> solution(vector<vector<string>> tickets) {
vector<string> answer;
vector<bool> isVisited(tickets.size(), false);
//๊ฐ๋ฅํ ๊ฒฝ๋ก๊ฐ 2๊ฐ ์ด์์ผ ๋ ์ํ๋ฒณ ์์๊ฐ ์์๋ ๊ฒฝ๋ก๋ฅผ return ํด์ผ ํ๋ฏ๋ก ๋ฏธ๋ฆฌ ์ ๋ ฌ.
sort(tickets.begin(), tickets.end());
//DFS ํ์์ผ๋ก ๋ชจ๋ ํ์ํ๋ ๊ฒฝ๋ก ์ฐพ๊ธฐ
DFS("ICN", tickets, answer, isVisited, 0);
return answer;
}
'๐ Coding Test Study > Algorithm Problem' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++][Programmers][ํด์] ์์ (feat. hash map ๋ฐ๋ณต๋ฌธ) (0) | 2023.05.16 |
---|---|
[C++][Programmers][ํด์] ํฌ์ผ๋ชฌ (0) | 2023.05.15 |
[C++][Programmers][DFS/BFS] ๋จ์ด ๋ณํ (0) | 2023.05.07 |
[C++][Programmers][DFS/BFS] ๋คํธ์ํฌ (0) | 2023.05.06 |
[C++][Programmers][DFS/BFS] ๊ฒ์ ๋งต ์ต๋จ๊ฑฐ๋ฆฌ (0) | 2023.05.04 |