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
- 투포인터
- 코테
- 알고리즘
- BaekJoon
- 코딩테스트
- LIS #Algorithm #요소추적
- 1편
- 카카오
- IBK기업은행 #기업은행 #디지털 #직무 #정리
- Smilegate
- 삼성 #코테 #2020상반기 #c++
- c++
- BFS
- 보석쇼핑
- 서버개발캠프
- 백준
- 스마일게이트
- 식단
- 카카오인턴
- 소감
- 유니온파인드
- Algorithm
- Union-find
- 중반부
Archives
- Today
- Total
짱아의 개발 기록장
2020 카카오 인턴십 : 동굴 탐험(c++) / Tree+BFS 본문
반응형
어떤 알고리즘으로 문제를 풀지를 고민하는 데 엄청 시간이 오래 걸렸다.
다른 분들의 풀이를 참고한 결과 bfs와 tree를 사용해서 푸는 문제였고
이전에 반드시 방문해야하는 방 => before
이전에 반드시 방문해야하는 방을 방문하지 않아 잠시 보류를 하는 방 => after
을 표시하여 적절하게 구현해주는 문제였다.
문제를 풀어도 30번 테케가 계속 틀려서 찾아보니
0번방은 반드시 이전에 방문해야하는 방이 존재하면 안된다는 조건을 걸어주어야 했다.
0번방이 start지점이기 때문에 before[0]!=0이라면 false를 리턴해주었다.
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
70
71
72
73
74
|
// 동굴탐험
#include <string>
#include <vector>
#include <queue>
#include <unordered_map>
#include <iostream>
using namespace std;
vector<vector<int>> graph;
unordered_map<int, int> before;
unordered_map<int, int> after;
vector<bool> checked;
void bfs()
{
queue<int> q;
checked[0] = true;
q.push(0);
while(!q.empty()){
int node = q.front();
q.pop();
for(int i=0; i<graph[node].size(); i++){
int next = graph[node][i];
if(checked[next]) continue;
if(!checked[before[next]]){
after[before[next]] = next;
continue;
}
q.push(next);
checked[next] = true;
if(after.find(next) != after.end()){
q.push(after[next]);
checked[after[next]] = true;
}
}
}
}
bool solution(int n, vector<vector<int>> path, vector<vector<int>> order) {
bool answer = true;
graph.resize(n);
checked.resize(n);
for(int i=0; i<path.size(); i++){
graph[path[i][0]].push_back(path[i][1]);
graph[path[i][1]].push_back(path[i][0]);
}
for(int i=0; i<order.size(); i++){
before[order[i][1]] = order[i][0];
}
// 0번방 이전에 방문해야하는 곳이 있다면, 불가능하다.(왜냐면, 동굴의 입구는 반드시 0번방부터 출발해야하기 때문..)
if(before[0]!=0) return false;
bfs();
for(int i=0; i<n; i++){
if(!checked[i]){
answer = false;
break;
}
}
return answer;
}
|
cs |
반응형
'Algorithm > 카카오 기출' 카테고리의 다른 글
2021 KAKAO BLIND RECRUITMENT : 카드 짝 맞추기 / 백트래킹+다익스트라 (0) | 2021.03.19 |
---|---|
2021 KAKAO BLIND RECRUITMENT : 광고 삽입 (c++) / String (0) | 2021.03.15 |
2019 카카오 개발자 겨울 인턴십 : 튜플(c++) / 구현 (0) | 2021.03.14 |
2018 KAKAO BLIND RECRUITMENT : 프렌즈4 블록(c++) / 구현 (0) | 2021.03.10 |
2020 KAKAO BLIND RECRUITMENT : 기둥과 보(c++) / 구현 (0) | 2021.03.10 |
Comments