Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- c++
- IBK기업은행 #기업은행 #디지털 #직무 #정리
- 식단
- 백준
- Smilegate
- LIS #Algorithm #요소추적
- 카카오인턴
- 카카오
- Union-find
- 소감
- 알고리즘
- Algorithm
- BaekJoon
- 서버개발캠프
- 스마일게이트
- 중반부
- 삼성 #코테 #2020상반기 #c++
- BFS
- 보석쇼핑
- 코딩테스트
- 유니온파인드
- 투포인터
- 코테
- 1편
Archives
- Today
- Total
짱아의 개발 기록장
프로그래머스. 여행경로(c++) / DFS + 백트래킹 본문
반응형
[핵심 요소]
계속 테케, 4번이 틀려서 봤더니....
왠걸 같은 항공편이 2번 있어도 괜찮기 때문에 from->to로 가는 항공편을 한 번 갔다고 해서
못가게 하면 안되는 것이었다.....즉, ["ICN", "A"], ["ICN", "A] 똑같은 항공편이 2개 있을 수도 있다는 것!
그래서 visited[][] 2차 배열을 사용해서 visited[from][to]의 항공편 개수를 저장해주었고
방문할때마다 -1씩 차감했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
#include <string>
#include <vector>
#include <map>
#include <iostream>
#include <algorithm>
using namespace std;
map<string, vector<string>> m;
vector<string> ans;
int kind = 0;
bool check = false;
int visited[10001][10001] = {0, };
map<string, int> idx;
vector<string> Ans;
void dfs(string airport){
if(check==true) return;
if(kind==ans.size()){
for(int i=0; i<ans.size(); i++){
Ans.push_back(ans[i]);
}
check = true;
return;
}
sort(m[airport].begin(), m[airport].end());
for(int i=0; i<m[airport].size(); i++){
if(visited[idx[airport]][idx[m[airport][i]]]==0) continue;
visited[idx[airport]][idx[m[airport][i]]]--;
ans.push_back(m[airport][i]);
dfs(m[airport][i]);
ans.pop_back();
visited[idx[airport]][idx[m[airport][i]]]++;
}
}
vector<string> solution(vector<vector<string>> tickets) {
vector<string> answer;
kind = tickets.size()+1;
int Idx = 0;
for(int i=0; i<tickets.size(); i++){
string from = tickets[i][0];
string to = tickets[i][1];
if(idx.count(from)==0){
idx[from] = Idx++;
}
if(idx.count(to)==0){
idx[to] = Idx++;
}
visited[idx[from]][idx[to]]++;
m[from].push_back(to);
}
ans.push_back("ICN");
sort(m["ICN"].begin(), m["ICN"].end());
for(int i=0; i<m["ICN"].size(); i++){
if(visited[idx["ICN"]][idx[m["ICN"][i]]]==0) continue;
visited[idx["ICN"]][idx[m["ICN"][i]]]--;
ans.push_back(m["ICN"][i]);
dfs(m["ICN"][i]);
ans.pop_back();
visited[idx["ICN"]][idx[m["ICN"][i]]]++;
}
return Ans;
}
|
cs |
반응형
'Algorithm > Programmers' 카테고리의 다른 글
프로그래머스. 단어변환(c++) / DFS+백트래킹 (0) | 2021.02.27 |
---|---|
프로그래머스. 순위(c++) / 그래프+플로이드와샬 (0) | 2021.02.27 |
(강추)프로그래머스. 구명보트(c++) / Greedy+Two pointer (0) | 2021.02.21 |
프로그래머스. 뉴스클러스터링(c++) / String (0) | 2021.02.21 |
[실력체크 level 1] 가장 작은 숫자 제거하기! (0) | 2021.02.20 |
Comments