기록하지 않았다면 잃어버릴 시간들
Home
  • 분류 전체보기 (184)
    • Lang (6)
      • c++ (2)
      • Java (2)
      • python (2)
    • 프레임워크 (18)
      • Spring (16)
      • JPA (2)
    • 알고리즘 (141)
      • 이론 (4)
      • 백준 (59)
      • Codility (13)
      • 프로그래머스 (65)
    • CS (4)
      • 운영체제 (0)
      • 자료구조 (0)
      • DB (4)
      • 네트워크 (0)
      • 보안 (0)
    • 기타 (7)
    • 프로젝트 (4)
      • 게시판 만들기로 배우는 Spring Data JP.. (4)
Home
  • 분류 전체보기 (184)
    • Lang (6)
      • c++ (2)
      • Java (2)
      • python (2)
    • 프레임워크 (18)
      • Spring (16)
      • JPA (2)
    • 알고리즘 (141)
      • 이론 (4)
      • 백준 (59)
      • Codility (13)
      • 프로그래머스 (65)
    • CS (4)
      • 운영체제 (0)
      • 자료구조 (0)
      • DB (4)
      • 네트워크 (0)
      • 보안 (0)
    • 기타 (7)
    • 프로젝트 (4)
      • 게시판 만들기로 배우는 Spring Data JP.. (4)
블로그 내 검색

기록하지 않았다면 잃어버릴 시간들

새로운 것을 배우는게 즐거운 개발자입니다.

  • 알고리즘/백준

    BOJ 1939 중량제한 / C++

    2022. 12. 3.

    by. 내이름은 킹햄찌

    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

     

    아이디어

    이진 탐색을 이용한 매개변수 탐색 문제입니다. 목표지점까지 갈 수 있는 방법이 없을때까지 물품의 무게를 조금씩 줄여나가며 최적의 값을 찾는 방법으로 풀이 했습니다.

     

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int S, E;
    int N, M;
    int maxW;
    vector<vector<pair<int, int>>> land;
    vector<bool> visited;
    
    void input() {
    	cin >> N >> M;
    	land.resize(N + 1, vector<pair<int, int>>());
    	for (int i = 0; i < M; i++) {
    		int s, e, r;
    		cin >> s >> e >> r;
    		land[s].push_back({ e,r });
    		land[e].push_back({ s,r });
    		if (r > maxW) maxW = r;
    	}
    	cin >> S >> E;
    }
    
    /*dfs 활용*/
    void findMax(int cur, int target) {
    	for (int i = 0; i < land[cur].size(); i++) {
    		int next = land[cur][i].first;
    		int weight = land[cur][i].second;
    		if (weight < target) continue;
    		if (visited[next]) continue;
    		visited[next] = true;
    		findMax(next, target);
    	}
    }
    
    int BinarySearch(int l, int r) {
    	while (l <= r) {
    		int mid = (r + l) >> 1;
    		visited.clear();
    		visited.resize(N + 1, false);
    		visited[S] = true;
    		findMax(S, mid);
    		if (visited[E]) {
    			l = mid + 1;
    		}
    		else {
    			r = mid - 1;
    		}
    	}
    	return r;
    }
    
    
    void solution() {
    	int res = BinarySearch(0, maxW);
    	cout << res;
    }
    
    int main(void) {
    	input();
    	solution();
    }

    '알고리즘 > 백준' 카테고리의 다른 글

    BOJ 2613 숫자구슬 / C++  (0) 2022.12.04
    BOJ 1072 게임 / C++  (0) 2022.12.04
    BOJ 18428 감시 피하기 / C++  (0) 2022.12.03
    BOJ 2632 피자판매 / C++  (1) 2022.12.03
    BOJ 3109 빵집 / C++  (2) 2022.09.15

    댓글

    관련글

    • BOJ 2613 숫자구슬 / C++ 2022.12.04
    • BOJ 1072 게임 / C++ 2022.12.04
    • BOJ 18428 감시 피하기 / C++ 2022.12.03
    • BOJ 2632 피자판매 / C++ 2022.12.03
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

Designed by Nana
블로그 이미지
내이름은 킹햄찌

티스토리툴바