[백준]1058(파이썬) - 친구

resilient

·

2021. 7. 19. 15:51

728x90
반응형

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

 

1058번: 친구

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

www.acmicpc.net

  • 이 문제는 다양한 방법으로 풀 수 있지만 나는 탐색으로 구현하였다.
  • 먼저 입력받은 2차원 배열을 2중 for문으로 돌리면서 graph [i][j]가 Y이고 i와 j 가 다를 경우 비어있는 2차원 배열의 i 인덱스에 넣어주었다. 그렇게 되면 data리스트에는 각각 인덱스 별로 Y가 들어있었던 인덱스만 들어있게 된다.
  • 그럼 그 data리스트를 for문으로 돌리면서 그 안에 Y, 즉 한 번 건너서 친구인 사람이 있는지 없는지 검사해주면 된다.
  • 구현하고 보니까 플로이드워셜 방법하고 똑같았다. 좀 복잡하게 사용했을 뿐..
  • 다음에는 DFS나 BFS로 풀 수 있을 거 같아서 풀어보려고 한다.
import sys
input = sys.stdin.readline


n = int(input())
graph = [list(input().rstrip()) for _ in range(n)]
data =[[] for _ in range(n)]
for i in range(n):
    for j in range(n):
        if graph[i][j] == 'Y' and i != j:
            data[i].append(j)
            for k in range(len(graph[j])):
                if graph[j][k] == 'Y' and i != k:
                    data[i].append(k)
data_flag = data
for i in range(len(data)):
    data[i] = list(set(data[i]))
Max = 0
for i in data:
    if len(i)>Max:
        Max = len(i)
print(Max)
반응형