CodingTest/Baekjoon

[baekjoon] 백준 1058번(파이썬): 친구

JunJangE 2021. 9. 3. 17:30

문제

 

1058번: 친구

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

www.acmicpc.net

알고리즘

- bfs 탐색을 통해 문제를 수행한다.

- 사람마다 친구와의 관계를 bfs로 탐색한다.

- 친구와의 관계가 2 미만인 경우만을 생각한다.

- 각 사람마다 2-친구의 수를 구했다면 거기서 제일 유명한 사람을 출력한다.

코드

import sys
from collections import deque


# bfs 탐색
def bfs(v):
    visited = [False] * n
    queue = deque([[v, 0]]) # 사람의 번호와 친구와의 관계
    visited[v] = True
    cnt = 0
    while queue:

        a, b = queue.popleft()

        # 친구와의 관계가 2이상이면 생각하지 않는다.
        if b >= 2:
            continue

        # 반복문을 통해 탐색하지 않은 사람이고 그 사람이 친구가 있는지 확인
        for i in range(n):
            if not visited[i] and graph[a][i] == "Y":
                cnt += 1
                visited[i] = True
                queue.append([i, b + 1])

    return cnt


n = int(sys.stdin.readline())
graph = [list(map(str, sys.stdin.readline().strip())) for _ in range(n)]

res = 0
# 각 사람마다 친구의 2-친구의 수를 구하고 제일 유명한 사람을 출력한다.
for i in range(n):
    res = max(res, bfs(i))

print(res)

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com