새소식

코딩테스트/백준_골드

[C++][백준 10159] 저울

  • -

[문제]

10159번: 저울 (acmicpc.net)

 

10159번: 저울

첫 줄에는 물건의 개수 N 이 주어지고, 둘째 줄에는 미리 측정된 물건 쌍의 개수 M이 주어진다. 단, 5 ≤ N ≤ 100 이고, 0 ≤ M ≤ 2,000이다. 다음 M개의 줄에 미리 측정된 비교 결과가 한 줄에 하나씩

www.acmicpc.net


[문제 풀이]

자기보다 가볍거나 무거운지를 알 수 없는 물건을 파악하면 된다.

플로이드 워셜을 이용해서 풀어보도록 하자!

 

나는 플로이드 워셜을 이용해서 자기로의 길이 뚫려있는지를 파악해보도록 하였다.

만일, 자기로의 길이 뚫려있다면 가벼운것을 자기로부터 길이 뚫려있다면 자기보다 무거운지를 파악 가능하니 해당 부분들을 모두 더해주고 전체 물건의 개수에서 자기자신(1)을 빼고 해당 부분들까지만 제거해주면 답이 나온다.


[코드]

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int objects[2001][2001];
int n, m;

void floid(){

    for(int k = 1;k<=n;k++){
        for(int i = 1;i<=n;i++){
            for(int j = 1;j<=n;j++){
                if(objects[i][k] + objects[k][j] == 2){
                    objects[i][j] = 1;
                }
            }
        }
    }

    return;
}

int main(){
    cin>>n>>m;

    // fill(object[0],object[n+1],1);

    for(int i = 0;i<m;i++){
        int a, b;
        cin>>a>>b;
        objects[a][b] = 1;
    }

    floid();

    int count = 0;
    for(int i = 1;i<=n;i++){
        count = 0;
        for(int j = 1;j<=n;j++){
            if(objects[i][j] == 1 || objects[j][i] == 1){
                count++;
            }
        }
        cout<<n - count - 1<<endl;
    }

    return 0;
}

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.