https://school.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 <map>
#include <algorithm>
#include <iostream>
using namespace std;
vector<string> answer;
bool DFS(const string& cur, const vector<vector<string>>& tickets, vector<bool>& useTicket)
{
// ๊ณตํญ ๋ฐฉ๋ฌธ
answer.push_back(cur);
// ๋ชจ๋ ํฐ๊ฒ ์ฌ์ฉ์ ์ข
๋ฃ
bool finish;
for(const auto& b : useTicket)
{
finish = b;
if(!finish)
break;
}
if(finish)
return true;
// ์ํ๋ฒณ์ด ์์๋ ๋ค์ ๊ณตํญ์ฐพ๊ธฐ
for(int i = 0; i < tickets.size(); ++i)
{
if(!useTicket[i] && tickets[i][0] == cur)
{
// ํฐ์ผ ์ฌ์ฉ, ๋ค์ ๊ณตํญ์ผ๋ก ์ด๋
useTicket[i] = true;
// ๋ชจ๋ ํฐ์ผ์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ผ๋ฉด true ๋ฐํ
if(DFS(tickets[i][1], tickets, useTicket))
return true;
// ๋ชจ๋ ํฐ์ผ์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ง ๋ชปํ๋ค๋ฉด ํฐ์ผ ์ฌ์ฉ ์ทจ์
useTicket[i] = false;
}
}
// ๋ค์ ๊ณตํญ์ ์ฐพ์ง ๋ชปํ๋ค๋ฉด ํ์ฌ ๊ณตํญ ๋ฐฉ๋ฌธ ์ทจ์
answer.pop_back();
return false;
}
vector<string> solution(vector<vector<string>> tickets)
{
vector<bool> useTicket(tickets.size(), false);
sort(tickets.begin(), tickets.end()); // ๊ฐ๋ฅํ ๊ฒฝ๋ก 2๊ฐ ์ด์์ผ ๊ฒฝ์ฐ ์ํ๋ฒณ ์์ผ๋ก ์์ ๊ฒฝ๋ก ์ฐ์
DFS("ICN", tickets, useTicket);
return answer;
}
์ฒ์์ ๊ณ์ ํ ์คํธ ์ผ์ด์ค 1, 2์์ ๊ณ์ ์ค๋ฅ๊ฐ ๋ฌ์๋ค.
๋ค์ ๋ ์กฐ๊ฑด์ ๋์์ ๋ง์กฑํ๋ ์ฝ๋๋ฅผ ์์ฑํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ฃผ์ด์ง ํญ๊ณต๊ถ์ ๋ชจ๋ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- ๋ง์ผ ๊ฐ๋ฅํ ๊ฒฝ๋ก๊ฐ 2๊ฐ ์ด์์ผ ๊ฒฝ์ฐ ์ํ๋ฒณ ์์๊ฐ ์์๋ ๊ฒฝ๋ก๋ฅผ return ํฉ๋๋ค.
๋ ๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํ๊ธฐ ์ํด ์ฐ์ tickets๋ฅผ ์ ๋ ฌํ๋ค. ๊ทธ๋์ผ ์ํ๋ฒณ ์์๋ก ์์ ๊ฒฝ๋ก๋ฅผ ๋จผ์ ํ์ํ๊ฒ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๋ค์์ผ๋ก ์กฐ๊ฑด์ ๋ง๋ ๊ฒฝ๋ก๋ฅผ ํ์ํ๋ค๊ฐ ๋ค์ ๊ณตํญ์ ์ฐพ์ง ๋ชปํ๋ค๋ฉด, ๊ณตํญ ์ด๋ฆ์ ๋ชฉ๋ก์์ ์ ์ธํ๊ณ false๋ฅผ ๋ฐํํ์ฌ ๋ชจ๋ ๊ณตํญ์ ๋ฐฉ๋ฌธํ์ง ๋ชปํ๋ ๊ฒฝ๋ก๋ answer์ ๋ฐ์ํ์ง ์๋๋ก ํ๋ค.
์์ง ์ฌ๊ท๊ฐ ์ต์ํ์ง ์์ ์ฐ์ต์ ๋ง์ด ํด์ผ๊ฒ ๋ค.
'๐ฅ๏ธ Study Note > Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ํ๋ก๊ทธ๋๋จธ์ค / level.2 / ํฐ ์ ๋ง๋ค๊ธฐ(C++) (0) | 2023.04.18 |
|---|---|
| ํ๋ก๊ทธ๋๋จธ์ค / level.3 / ์์ดํ ์ค๊ธฐ(C++) (0) | 2023.04.17 |
| ํ๋ก๊ทธ๋๋จธ์ค / level.3 / ๋จ์ด ๋ณํ(C++) (0) | 2023.04.13 |
| ํ๋ก๊ทธ๋๋จธ์ค / level.2 / ๊ฒ์ ๋งต ์ต๋จ๊ฑฐ๋ฆฌ(C++) (0) | 2023.04.11 |
| ํ๋ก๊ทธ๋๋จธ์ค / level.3 / ๋คํธ์ํฌ(C++) (0) | 2023.04.10 |