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
- TCP
- 다이나믹 프로그래밍
- 백준
- GIT
- 트리
- 브루트포스
- Spring
- 재귀
- dfs
- 이분탐색
- 그리드
- CI/CD
- 다이나믹프로그래밍
- 컴퓨터 네트워크
- 그리드 알고리즘
- 자료구조
- 알고리즘
- HTTP
- 스프링
- 자바
- 순열
- 분할 정복
- 그래프
- AWS
- 도커
- BFS
- 역방향 반복자
- SQL
- 분할정복
- github action
Archives
- Today
- Total
코딩성장스토리
백준 1939번:중량제한 본문
https://www.acmicpc.net/problem/1939
1939번: 중량제한
첫째 줄에 N, M(1 ≤ M ≤ 100,000)이 주어진다. 다음 M개의 줄에는 다리에 대한 정보를 나타내는 세 정수 A, B(1 ≤ A, B ≤ N), C(1 ≤ C ≤ 1,000,000,000)가 주어진다. 이는 A번 섬과 B번 섬 사이에 중량제한이
www.acmicpc.net
이 문제는 이분탐색과 bfs를 쓰면서 풀었다.
이 문제를 보고 처음 든 생각은 시간복잡도 이다.
BFS와 이분탐색이 합쳐져 있기 떄문이다. BFS 시간 복잡도는 O(N) 이고 이분탐색은 O(logn) 즉 합쳐서 O(nlogn)이다.
일단 가중치(무게)를 1부터 최대값을 범위를 지정하고 무게에 따라 이분탐색을 실시했다. 섬이 연결되어 있는 것이라 BFS를 이용해서 섬들을 다 조회해서 정해진 무게랑 비교를 하면서 함수를 작성했다. 코드를 보자
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int start,ed;
vector<pair<int,int>> v[100001];
bool check[100001]; //섬방문했는지 체크
bool go(int x,int weight){ //weight란 값보다 가지고 갈 수 있는 무게가 더 크면 true반환
if(check[x]){
return false;
}
check[x]=true;
if(x==ed){
return true;
}
int len=v[x].size();
for(int i=0;i<len;i++){
int next=v[x][i].first;
int cnt=v[x][i].second;
if(cnt>=weight){
if(go(next,weight)){
return true;
}
}
}
return false;
}
int main(){
cin.tie(NULL);
cout.tie(NULL);
ios_base::sync_with_stdio(false);
int n,m;
cin>>n>>m;
while(m--){
int a,b,c;
cin>>a>>b>>c;
v[a].push_back(make_pair(b,c));
v[b].push_back(make_pair(a,c));
}
cin >>start>>ed;
int left=1;
int right=1000000000;
int ans=0;
while(left<=right){ //이분탐색
int mid = left+(right-left)/2;
memset(check,false,sizeof(check));
if(go(start,mid)){
ans=mid;
left=mid+1;
}
else{
right=mid-1;
}
}
cout<<ans;
}
'백준 코딩' 카테고리의 다른 글
백준 2022번:사다리 (0) | 2022.01.25 |
---|---|
백준 1561번: 놀이 공원 (0) | 2022.01.25 |
백준 2110번: 공유기 설치 (0) | 2022.01.22 |
백준 2805번:나무 자르기 (0) | 2022.01.21 |
백준 1654번:랜선 자르기 (0) | 2022.01.20 |