์ฌํ๊ฒฝ๋ก
๋ฌธ์
https://programmers.co.kr/learn/courses/30/lessons/43164
๋ฌธ์ ์ค๋ช
์ฃผ์ด์ง ํญ๊ณต๊ถ์ ๋ชจ๋ ์ด์ฉํ์ฌ ์ฌํ๊ฒฝ๋ก๋ฅผ ์ง๋ ค๊ณ ํฉ๋๋ค. ํญ์ ICN ๊ณตํญ์์ ์ถ๋ฐํฉ๋๋ค.
ํญ๊ณต๊ถ ์ ๋ณด๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด tickets๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ฐฉ๋ฌธํ๋ ๊ณตํญ ๊ฒฝ๋ก๋ฅผ ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- ๋ชจ๋ ๊ณตํญ์ ์ํ๋ฒณ ๋๋ฌธ์ 3๊ธ์๋ก ์ด๋ฃจ์ด์ง๋๋ค.
- ์ฃผ์ด์ง ๊ณตํญ ์๋ 3๊ฐ ์ด์ 10,000๊ฐ ์ดํ์ ๋๋ค.
- tickets์ ๊ฐ ํ [a, b]๋ a ๊ณตํญ์์ b ๊ณตํญ์ผ๋ก ๊ฐ๋ ํญ๊ณต๊ถ์ด ์๋ค๋ ์๋ฏธ์ ๋๋ค.
- ์ฃผ์ด์ง ํญ๊ณต๊ถ์ ๋ชจ๋ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- ๋ง์ผ ๊ฐ๋ฅํ ๊ฒฝ๋ก๊ฐ 2๊ฐ ์ด์์ผ ๊ฒฝ์ฐ ์ํ๋ฒณ ์์๊ฐ ์์๋ ๊ฒฝ๋ก๋ฅผ return ํฉ๋๋ค.
- ๋ชจ๋ ๋์๋ฅผ ๋ฐฉ๋ฌธํ ์ ์๋ ๊ฒฝ์ฐ๋ ์ฃผ์ด์ง์ง ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
tickets | return |
---|---|
[[ICN, JFK], [HND, IAD], [JFK, HND]] | [ICN, JFK, HND, IAD] |
[[ICN, SFO], [ICN, ATL], [SFO, ATL], [ATL, ICN], [ATL,SFO]] | [ICN, ATL, ICN, SFO, ATL, SFO] |
์ ์ถ๋ ฅ ์ ์ค๋ช
์์ #1
[ICN, JFK, HND, IAD] ์์ผ๋ก ๋ฐฉ๋ฌธํ ์ ์์ต๋๋ค.
์์ #2
[ICN, SFO, ATL, ICN, ATL, SFO] ์์ผ๋ก ๋ฐฉ๋ฌธํ ์๋ ์์ง๋ง [ICN, ATL, ICN, SFO, ATL, SFO] ๊ฐ ์ํ๋ฒณ ์์ผ๋ก ์์ญ๋๋ค.
์ฝ๋
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<string> DFS(vector<string>& stk, string key, vector<vector<string>>& tickets){
if(tickets.size()==0) // ticket์ ๋ชจ๋ ์ดํด๋ดค์ผ๋ฉด
return stk; // ์์๋๋ก ๋ค์ด๊ฐ์๋ค.
for(int i=0; i<tickets.size(); i++){ // ํฐ์ผ์ ๋ชจ๋ ์ดํด๋ณธ๋ค.
vector<string> tmp = tickets[i];
if(tmp[0]==key){ // key ๊ฐ์ ๋ฐ๋ฅธ value๋ฅผ ๊ฐ์ ธ์จ๋ค.
stk.push_back(tmp[1]);
tickets.erase(tickets.begin()+i);
vector<string> result = DFS(stk, tmp[1],tickets); // ์ฌ๊ท
if(result.size()!=0)
return result;
stk.pop_back();
tickets.insert(tickets.begin()+i,tmp);
}
}
vector<string> tmp;
return tmp;
}
vector<string> solution(vector<vector<string>> tickets) {
vector<string> answer;
sort(tickets.begin(), tickets.end());
answer.push_back("ICN");
answer = DFS(answer,"ICN",tickets);
return answer;
}
ํ์ด
์ด ๋ฌธ์ ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ํ๊ธฐ๊ฐ ์ด๋ ค์ ๋ค.
map์ ์ฌ์ฉํ์์ ๋๋ ๊ธฐ์กด์ ["ICN, "JFK"]
์ด๋ ํํ๋ฅผ {"ICN":["JFK"]}
์ ๊ฐ์ด ๋ฐ๊พธ๊ฒ ๋๋ค. map์ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ticket์ ์ฒดํฌํ๋์ง๋ฅผ ์๊ธฐ ์ด๋ ต๋ค. ์๋๋ฉด map ์๋ฃ๊ตฌ์กฐ ์ key์ ๋ฐ๋ฅธ value์ ๊ฐ์ด ๋ชจ๋ ๋น์ด์๋์ง๋ฅผ ํ์ธํด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง key ๊ฐ์ ๋ฐ๋ฅธ value ๊ฐ์ ์ฐพ๊ธฐ๊ฐ ์ฌ์ด ์ฅ์ ์ ์๋ค.
stack์ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด์ ["ICN", "JFK"]
ํํ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ticket์ ์ฒดํฌํ๋์ง ์๊ธฐ ์ฝ๋ค. stack์ size๊ฐ 0์ธ์ง๋ง ์๋ฉด ๋๋ค. ํ์ง๋ง ํด๋น key ๊ฐ์ ๋ฐ๋ฅธ value๊ฐ ๋ฌด์์ด ์๋์ง ์๊ธฐ ์ํด์๋ ์กด์ฌํ๋ ticket์ ๋ชจ๋ ์ดํด๋ด์ผํ๋ค.
๋๋ DFS๋ก stack์ ์ฌ์ฉํด์ ํ์๋ค.
์ฑ์ ๊ฒฐ๊ณผ
Comment