Study/Algorithm

BOJ (C/C++) 1058번: 친구

hwooo 2022. 11. 1. 01:54

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

 

1058번: 친구

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

www.acmicpc.net


풀이

i와 j가 친구일 때, j와 친구인 k도 i와 친구이다.F배열의 값을 바꾸면 예제 4의 답이 틀리게 나와서 2-친구 관계를 표현한 visited배열을 추가함.

코드

#include <stdio.h>
bool F[50][50], visited[50][50];

int Friend(int now, int N) {
	int max = 0, cnt;
	for (int i = 0; i < N; i++) {
		cnt = 0;
		for (int j = 0; j < N; j++) {
			if (F[i][j]) {
				visited[i][j] = true;
				for (int k = 0; k < N; k++) {
					if (F[j][k] && i != k) visited[i][k] = true;
				}
			}
		}
		// 친구 수 구하기
		for (int j = 0; j < N; j++) {
			if (visited[i][j]) cnt++;
		}
		if (max < cnt) max = cnt;
	}
	return max;
}
int main() {
	int N;
	char c[51];
	scanf("%d", &N);
	for (int i = 0; i < N; i++) {
		scanf("%s", c);
		for (int j = 0; j < N; j++) {
			if (c[j] == 'Y') F[i][j] = visited[i][j] = true;
		}
	}
	printf("%d", Friend(0, N));
	return 0;
}