일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SW Expert Academy
- 프로그래머스
- 독서
- cs
- LeetCode
- swea
- language
- algogritim
- Programmers
- Computer Science
- 운영체제
- 문제풀이
- D3
- data structure
- c++
- 감상문
- 알고리즘
- 백준
- 재테크/투자
- BOJ
- db
- network
- OS
- Database
- algorithm
- 네트워크
- 법의학
- 데이터베이스
- 자료구조
- D2
Archives
- Today
- Total
선택은 나의 것
[BOJ 백준] 18352번 특정 거리의 도시 찾기 본문
문제
BOJ 18352 : https://www.acmicpc.net/problem/18352
18352번: 특정 거리의 도시 찾기
첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X가 주어진다. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) 둘째 줄부터 M개의 줄에 걸쳐서 두 개
www.acmicpc.net
접근
BFS를 이용해 풀 수 있는 간단한 문제이다. queue에 값을 넣을 때마다 깊이를 체크해주며 깊이가 K라면 정답을 출력할 배열에 넣어주면 된다. 즉, 기존의 BFS를 구현하는 코드에서 if문 하나만 추가해주면 되는 것이다. 나는 이 과정에서 자동으로 오름차순 정렬을 위해 set을 사용하였으나 vector와 sort를 사용해줘도 상관없다.
코드
#include <iostream>
#include <queue>
#include <set>
#include <vector>
#define endl "\n"
using namespace std;
int N, M, K, X, visit[300010] = {0};
vector<int> map[300010];
set<int> ans;
int main() {
cin >> N >> M >> K >> X;
int a, b;
for (int i = 0; i < M; i++) {
cin >> a >> b;
map[a].push_back(b);
}
queue<pair<int, int>> q;
q.push({X, 0});
visit[X] = 1;
while (!q.empty()) {
pair<int, int> p = q.front();
q.pop();
if (p.second > K)
break;
for (int i = 0; i < map[p.first].size(); i++) {
if (visit[map[p.first][i]] != 0)
continue;
if (p.second + 1 == K)
ans.insert(map[p.first][i]);
q.push({map[p.first][i], p.second + 1});
visit[map[p.first][i]] = 1;
}
}
if (ans.size() == 0)
cout << -1;
else {
for (auto i : ans)
cout << i << endl;
}
return 0;
}
'☽ Algorithm > BOJ' 카테고리의 다른 글
[BOJ 백준] 12865번 평범한 배낭 (0) | 2021.06.30 |
---|---|
[BOJ 백준] 2206번 벽 부수고 이동하기 (0) | 2021.06.29 |
[BOJ 백준] 16973번 직사각형 탈출 (0) | 2021.06.23 |
[BOJ 백준] 2056번 작업 (0) | 2021.06.09 |
[BOJ 백준] 10872번 팩토리얼 (Python) (0) | 2020.09.16 |
Comments