| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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
- cpp
- 이분탐색
- 그리디
- java
- 통신 인터페이스
- 동적계획법
- 다이나믹 프로그래밍
- level3
- 백준
- 우선순위큐
- lv2
- c++
- 프로그래머스
- C
- 컴퓨터비전
- 코틀린
- 구현
- 다이나믹프로그래밍
- Stack
- 임베디드
- JavaScript
- dp
- 2018 KAKAO BLIND RECRUITMENT
- 누적합
- kotlin
- 자바
- 컴퓨터 비전
- dfs
- BFS
- level2
Archives
- Today
- Total
코드를 느껴바라
15591번 : MooTube (Silver) [C++] 본문
문제 링크
성공 여부(걸린 시간): 성공(50분)
아이디어
간단하게 BFS로 풀 수 있는 문제였으나 C++ 문법이 기억이 안나서 동적할당하느라 30분 정도 소요한 것 같다.
❌ -> 처음에는 플로이드-워셜 알고리즘으로 풀어볼까 했으나
시간 복잡도가 N^3인 해당 알고리즘으로는 N이 최대 5000개인 이 문제를 풀기는 어렵다고 생각했고
⭕ -> BFS를 통해서 지나온 간선 중에 최소의 가중치인 USADO가 K이상인 영역까지만 노드의 수를 카운팅하여 출력하면
문제에서 원하는 값을 구할 수 있게 됨을 인지하고 그렇게 풀게 되었다.
풀이코드
#include<iostream>
#include<vector>
#include<algorithm>
#include <queue>
using namespace std;
static int INF_MAX = 210000000;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int N, Q;
cin >> N >> Q;
vector<vector<pair<int, int>>> usado(N + 1);
for (int i = 0; i < N-1; i++) {
int p, q, r;
cin >> p >> q >> r;
usado[p].push_back({ q,r });
usado[q].push_back({ p,r });
}
for (int i = 0; i < Q; i++) {
int k, v;
cin >> k >> v;
//BFS를 통해서 이번에 몇개의 동영상을 추천할지 고르기
queue<int> q;
vector < bool> visited(N+1, false);
visited[v] = true;
int cnt = 0;
for (pair<int, int> edge : usado[v]) {
if (edge.second<k) {
continue;
}
q.push(edge.first);
visited[edge.first] = true;
}
while (!q.empty()) {
int cur = q.front();
q.pop();
cnt++;
for (pair<int, int> nextEdge: usado[cur]) {
int next = nextEdge.first;
if (!visited[next] && k<=nextEdge.second) {
visited[next] = true;
q.push({next});
}
}
}
cout << cnt << "\n";
}
return 0;
}
/*
USADO가 K 이상인 동영상은
해당 지점까지 가는데에 간선의 최대값이 K보다 커야한다는 뜻
BFS로 가다가 K보다 큰 경우만 추가해주다가 K보다 작은 경우를 만나면 종료하고
탐색을 진행했던 노드들의 수를 카운팅 해서 출력해주면 됨
*/반응형
'PS > 백준(Baekjoon)' 카테고리의 다른 글
| 2644번 : 촌수계산 [C++] (0) | 2025.12.24 |
|---|---|
| 1417번 : 국회의원 선거 [C++] (0) | 2025.12.24 |
| 1189번 : 컴백홈 [C++] (0) | 2025.12.21 |
| 10653번 : 마라톤 2 [JAVA] (0) | 2025.12.02 |
| 2638번 : 치즈 [JAVA] (0) | 2025.11.09 |
