문제
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
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 9093번(파이썬): 단어 뒤집기 (0) | 2021.09.04 |
---|---|
[baekjoon] 백준 10828번(파이썬): 스택 (0) | 2021.09.04 |
[baekjoon] 백준 1916번(파이썬): 최소비용 구하기 (0) | 2021.09.02 |
[baekjoon] 백준 1753번(파이썬): 최단경로 (0) | 2021.09.01 |
[baekjoon] 백준 1389번(파이썬): 케빈 베이컨의 6단계 법칙 (0) | 2021.08.31 |