반응형
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 |