반응형

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

 

1058번: 친구

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

www.acmicpc.net

 

해결 방법 : DFS

  • dfs를 쓰긴 했지만, 브루트포스, BFS, floyed-warshall 등 모두 가능할듯하다.
  • target person으로 부터 2번 안에 도착할 수 있는 모든 사람들은 친구인점을 이용하면 된다.
import sys
input = sys.stdin.readline

def solution(N, arr):
    answer = 0
    friends = [set() for _ in range(N)] # 친구는 중복되지 않으므로 set을 사용

    def dfs(target, person, depth): # DFS (친구를 찾으려는 person, 현재 탐색할 person, 관계 depth)
        if depth == 3: # 깊이가 3인 친구는 2-friend가 아니다
            return

        for friend in range(N): # 현재 person의 친구 탐색
            if target != friend and arr[person][friend] == 'Y': 
                friends[target].add(friend)
                dfs(target, friend, depth + 1) 

    for t in range(N):
        dfs(t, t, 1)

    return max([len(f) for f in friends]) # 가장 많은 친구들 수

if __name__ == '__main__':
    N = int(input())
    arr = [input().strip() for _ in range(N)]
    result = solution(N, arr)
    print(result)
반응형

'IT study > 알고리즘 문제 풀이' 카테고리의 다른 글

백준 2606 : 바이러스  (0) 2021.08.07
백준 1138 : 한 줄로 서기  (0) 2021.08.05
백준 1005 : ACM Craft  (0) 2021.07.31
백준 1135 : 뉴스 전하기  (0) 2021.07.30
백준 1306 : 달려라 홍준  (0) 2021.07.30

+ Recent posts