danbibibi
article thumbnail

문제

문제 바로가기> BOJ 2617번: 구슬 찾기

 

2617번: 구슬 찾기

모양은 같으나, 무게가 모두 다른 N개의 구슬이 있다. N은 홀수이며, 구슬에는 번호가 1,2,...,N으로 붙어 있다. 이 구슬 중에서 무게가 전체의 중간인 (무게 순서로 (N+1)/2번째) 구슬을 찾기 위해서

www.acmicpc.net

 

풀이

dfs를 이용하여 중간 크기의 구슬이 될 수 없는 경우를 체크해주었다.

#include<iostream>
#include<cstring>
#include<set>
#define MAX 100
using namespace std;

int N, M;
bool visited[MAX];
set<int> fs[MAX], rs[MAX];

void input(){
    cin >> N >> M;

    int a, b;
    for (int i = 0; i < M; i++){
        cin >> a >> b;
        fs[a].insert(b);
        rs[b].insert(a);
    }
}

int get_weight(int n, set<int> *s){
    int res = 1;
    visited[n] = true;
    for(int nxt : s[n]){
        if(visited[nxt]) continue;
        res += get_weight(nxt, s);
    }
    return res;
}

void solve(){
    int ans = 0;
    for (int n = 1; n <= N; n++){
        // 1. 가벼운 구슬 계산
        memset(visited, false, sizeof(visited));
        int lighter = get_weight(n, fs);

        // 2. 무거운 구슬 계산
        memset(visited, false, sizeof(visited));
        int heavier = get_weight(n, rs);

        // 3. 중간 크기의 구슬이 될 수 없는 경우를 체크
        if (lighter > (N + 1) / 2 || heavier > (N + 1) / 2) ans++;
    }
    cout << ans;
}

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);
    input();
    solve();
}

'문제 풀이 > 백준' 카테고리의 다른 글

BOJ 9466번: 텀 프로젝트  (0) 2024.03.26
BOJ 20040번: 사이클 게임  (1) 2024.03.24
BOJ 3020번: 개똥벌레  (0) 2024.03.20
BOJ 16947번: 서울 지하철 2호선  (1) 2024.03.07
BOJ 5719번: 거의 최단 경로  (0) 2024.02.21
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로