기록하지 않았다면 잃어버릴 시간들
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 15591 MooTube / C++

    2022. 5. 24.

    by. 내이름은 킹햄찌

    https://www.acmicpc.net/problem/15591

     

    15591번: MooTube (Silver)

    농부 존은 1번 동영상과 2번 동영상이 USADO 3을 가지고, 2번 동영상과 3번 동영상이 USADO 2를 가지고, 2번 동영상과 4번 동영상이 USADO 4를 가진다고 했다. 이것에 기반해서 1번 동영상과 3번 동영상의

    www.acmicpc.net

    백준 온라인저지 15591번 MooTube문제입니다.

     

    아이디어

    이 문제는 난이도의 비율이 문제 이해에 50%가 넘는 것 같았다. 문제만 이해한다면 풀이는 어렵지 않을 것 같네요.

    네트워크 간선을 만들고 start 노드에서 출발하여 USADO이상을 가지는 간선들을 이동하여 카운팅하면 되는 문제인데요

    bfs로 조건에 맞는 간선들을 돌며 모두 찾아낼 수 있다고 판단하여 bfs로 풀이 했습니다.

    #include<iostream>
    #include<vector>
    #include<queue>
    using namespace std;
    
    vector<pair<int, int>> adj[5001];
    bool visited[5001];
    int n, q;
    
    void input() {
    	cin >> n >> q;
    	for (int i = 0; i < n - 1; i++) {
    		int a, b, c;
    		cin >> a >> b >> c;
    		//네트워크 간선 생성
    		adj[a].push_back({ b,c });
    		adj[b].push_back({ a,c });
    	}
    }
    
    void bfs(int USADO, int start) {
    	int cnt = 0;
    	queue<int> q;
    	q.push(start);
    	vector<bool> visited(n + 1, false);
    	visited[start] = true;
    	while (!q.empty()) {
    		int current = q.front();
    		q.pop();
    		for (int i = 0; i < adj[current].size(); i++) {
    			//방문 여부 체크
    			if (visited[adj[current][i].first]) continue;
    			//해당 노선의 USADO 확인
    			if (adj[current][i].second < USADO) continue;
    			visited[adj[current][i].first] = true;
    			q.push(adj[current][i].first);
    			cnt++;
    		}
    	}
    	cout << cnt << "\n";
    }
    
    void solution() {
    	int v, k;
    	cin >> v >> k;
    
    	bfs(v, k);
    }
    int main(void) {
    	input();
    	for (int i = 0; i < q; i++) {
    		solution();
    	}
    }

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

    BOJ 14499 주사위 굴리기 / C++  (0) 2022.07.26
    BOJ 13460 구슬 탈출 2 / C++  (0) 2022.07.26
    BOJ 1476 날짜 계산 / C++  (0) 2022.05.24
    BOJ 2231 분해합 / C++  (0) 2022.05.24
    BOJ 1436 영화감독 숌 / C++  (0) 2022.05.24

    댓글

    관련글

    • BOJ 14499 주사위 굴리기 / C++ 2022.07.26
    • BOJ 13460 구슬 탈출 2 / C++ 2022.07.26
    • BOJ 1476 날짜 계산 / C++ 2022.05.24
    • BOJ 2231 분해합 / C++ 2022.05.24
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

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

티스토리툴바