728x90
https://www.acmicpc.net/problem/1058
1058번: 친구
지민이는 세계에서 가장 유명한 사람이 누구인지 궁금해졌다. 가장 유명한 사람을 구하는 방법은 각 사람의 2-친구를 구하면 된다. 어떤 사람 A가 또다른 사람 B의 2-친구가 되기 위해선, 두 사람
www.acmicpc.net
접근법
- 플로이드 워셜을 통해 직접적인 친구 관계이거나 다른 한명을 건너 친구인 수를 모두 구함
- 그 중 maximum 값을 출력
def input_func():
N = int(input())
arr = []
for i in range(N):
# input.split()을 하지 않으면 한 글자씩 분리하여 저장
arr.append(list(input()))
return N, arr
def solution(N, arr):
friend_num = [[0 for _ in range(N)] for _ in range(N)]
for i in range(N):
for j in range(N):
for k in range(N):
if j == k:
continue
if arr[j][k] == 'Y' or (arr[j][i] == 'Y' and arr[i][k] == 'Y'):
friend_num[j][k] = 1
ans = 0
for row in friend_num:
ans = max(ans, sum(row))
print(ans)
def main():
N, arr = input_func()
solution(N, arr)
return
if __name__ == '__main__':
main()
사용된 알고리즘
그래프 이론, 브루트포스 알고리즘, 그래프 탐색, 플로이드-워셜
728x90
'study > 백준(BOJ)' 카테고리의 다른 글
[Python] 2012. 등수 매기기 (0) | 2023.06.01 |
---|---|
[Python] 11660. 누적 합 구하기 5 (0) | 2023.06.01 |
[Python] 1679. 숫자놀이 (0) | 2023.05.17 |
[Python] 2458. 키 순서 (1) | 2023.05.17 |
[Python] 22114. 창영이와 점프 (0) | 2023.05.17 |