만족은 하되 안주하지는 말자

기록해야 기억한다

프로그래밍/programmers&bj

[C++] 백준 1058번: 친구

D36choi 2020. 7. 9. 21:00
728x90

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

 

1058번: 친구

지민이는 세계에서 가장 유명한 사람이 누구인지 궁금해졌다. 가장 유명한 사람을 구하는 방법은 각 사람의 2-친구를 구하면 된다. 어떤 사람 A가 또다른 사람 B의 2-친구가 되기 위해선, 두 사람�

www.acmicpc.net

 

2-친구를 구하는 문제다. 2-친구라는건 A와 B가 친구거나, A와 B가 친구가 아니더라도, 인싸인 C에 의해 연결될 수 있는 사이를 말하는 것이다. A-B 이거나 A-C-B 인 관계를 의미한다.

 

시간이 매우 오래 걸리는 방법을 택한듯 하다. 거의 브루트포스 아닐까 싶다. 내 풀이가 그렇게 좋은 풀이는 아닌것 같다.

#include <iostream>
#include <string.h>
#include <algorithm>
#define MAX_N 50
using namespace std;

int main(){
    int N;
    string friends_each[MAX_N];
    int two_friend_cnt[MAX_N] = {0};
    cin >> N;
    for(int n=0; n<N; n++)
    {
        cin >> friends_each[n];
    }
    for(int n=0; n<N; n++)
    {
        for(int i=0; i<N; i++)
        {
            if(n==i)
            {
                continue;
            }
            if(friends_each[n][i]=='Y')
            {
                two_friend_cnt[n]++;
            }
             else if(friends_each[n][i]=='N')
            {
                for(int j=0; j<N; j++)
                {
                    if((friends_each[n][j] =='Y') && (friends_each[i][j] == 'Y'))
                    {
                        two_friend_cnt[n]++;
                        break;
                    }
                }
            }
        }
    }
    int ans = *max_element(two_friend_cnt,two_friend_cnt+N);
    cout << ans << "\n";
}