Notice
Recent Posts
Recent Comments
Link
Tags
- ๋นํธ๋ง์คํน
- DP
- BFS
- ์นด์นด์ค2021
- go
- Python
- Union-Find
- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
- nestjs
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- ์นด์นด์ค ์ฝํ
- ์๊ณ ๋ฆฌ์ฆ
- C++
- ์ํฐ๋
- ๋นํธ๋งต
- ์์ฝ๋
- js
- ํ๋ฆฌ์จ๋ณด๋ฉ
- ๋ฐฑ์ค
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- LCs
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- golang
- ๋ค์ต์คํธ๋ผ
- ์น๋ฆฐ์ด
- ํ๋ก๊ทธ๋๋จธ์ค
- DFS
- ์ฌ๊ท
- ํธ๋ฆฌ
- ์ด๋ถํ์
Archives
- Today
- Total
Hello Ocean! ๐ผ
[ํ๋ก๊ทธ๋๋จธ์ค] ์ฌํ ๊ฒฝ๋ก, C++ ๋ณธ๋ฌธ
๋ฐ์ํ
๋ฌธ์ ์ค๋ช
์ฃผ์ด์ง ํญ๊ณต๊ถ์ ๋ชจ๋ ์ด์ฉํ์ฌ ์ฌํ๊ฒฝ๋ก๋ฅผ ์ง๋ ค๊ณ ํฉ๋๋ค. ํญ์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] ๊ฐ ์ํ๋ฒณ ์์ผ๋ก ์์ญ๋๋ค.
ํ์ด
- dfs๋ก ํ์ด
- ์์์ ์ ํญ์ ICN
- ๊ฐ๋ฅํ ๊ฒฝ๋ก๊ฐ ๋๊ฐ ์ด์์ผ ๊ฒฝ์ฐ ์ํ๋ฒณ ์์๊ฐ ์์๋ ๊ฒฝ๋ก๋ฅผ returnํด์ผ ํ๋ฏ๋ก, ์ ๋ ฌ ํ์
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool dfs(string start, vector<vector<string>>& tickets, vector<bool>& visit, vector<string>& route, vector<string>& answer, int count) {
route.push_back(start); //์์์ push
if (count == tickets.size()) { //์ฃผ์ด์ง ํฐ์ผ์ ๋ค ์ฐ๋ฉด return
answer = route;
return true;
}
for (int i=0 ; i<tickets.size() ; i++) { //ํฐ์ผ ๊ฐ์๋งํผ ๋ฐ๋ณต
if (tickets[i][0] == start && visit[i] == false) { //start์์ ์์ํ๋ ํฐ์ผ์ด๊ณ , ํด๋น ํฐ์ผ์ ์ด ์ ์ด ์์ผ๋ฉด
visit[i] = true; //ํด๋น ํฐ์ผ ์ฌ์ฉ
//ํด๋น ํฐ์ผ์ ๋์ฐฉ์ง๋ฅผ ์์์ ์ผ๋กํด์ ๋ค์ dfs
bool success = dfs(tickets[i][1], tickets, visit, route, answer, count+1);
if (success) //ํด๋น ํฐ์ผ์ ๋์ฐฉ์ง๋ฅผ ์์์ ์ผ๋ก ํด์ dfsํด์ ํ์์ ์ฑ๊ณตํ๋ฉด
return true; //์ข
๋ฃ
visit[i] = false; //์๋๋ฉด, ํด๋น ํฐ์ผ์ ์ฌ์ฉํ์ง ์์ ๊ฒ์ผ๋ก ๋ณ๊ฒฝ (ํ์์ ์คํจํ์ผ๋ฏ๋ก)
}
}
route.pop_back(); //start๋ฅผ ์์์ผ๋ก ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ํ์ํ์ผ๋ฏ๋ก, start๋ฅผ route์์ ์ ๊ฑฐ
return false;
}
vector<string> solution(vector<vector<string>> tickets) {
vector<string> answer, route;
vector<bool> visit(tickets.size(), false); //ํฐ์ผ์ ์ฌ์ฉํ๋์ง ์ฌ๋ถ๋ฅผ ๋ด๋ ๋ฐฐ์ด
sort(tickets.begin(), tickets.end()); //์ํ๋ฒณ ์์ผ๋ก ์ ๋ ฌ (๊ฐ๋ฅํ ๊ฒฝ์ฐ๊ฐ 2๊ฐ ์ด์์ผ ๊ฒฝ์ฐ ๋๋น)
dfs("ICN", tickets, visit, route, answer, 0); //์์์ ์ ํญ์ ์ธ์ฒ๊ณตํญ
return answer;
}
๋ฐ์ํ
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] 2020 ์นด์นด์ค/๊ดํธ ๋ณํ (0) | 2020.10.12 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ฌธ์์ด ์์ถ (0) | 2020.10.05 |
[์๊ณ ๋ฆฌ์ฆ] ์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ (0) | 2020.09.21 |
[์๊ณ ๋ฆฌ์ฆ] MST (์ต์ ์ ์ฅ ํธ๋ฆฌ) (0) | 2020.09.21 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํ๊ฒ ๋๋ฒ, C++ (0) | 2020.09.21 |