[158]友人-コード解析
質問:https://www.acmicpc.net/problem/1058
志敏は世界で一番有名な人が誰なのか知りたい.最も有名な人を救う方法は、一人一人の2-友达を救うことです.一人のAをもう一人のBの2-友达にするために、二人は友达か、Aの友达か、Bの友达Cの存在か.ここで一番有名なのは2-友達の数が一番多い人です.プログラムを書いて、一番有名な人の2人の友達の数を出力します.
AとBが友達ならBとAも友達AとAは友達じゃない
志敏は世界で一番有名な人が誰なのか知りたい.最も有名な人を救う方法は、一人一人の2-友达を救うことです.一人のAをもう一人のBの2-友达にするために、二人は友达か、Aの友达か、Bの友达Cの存在か.ここで一番有名なのは2-友達の数が一番多い人です.プログラムを書いて、一番有名な人の2人の友達の数を出力します.
AとBが友達ならBとAも友達AとAは友達じゃない
import sys
sys.stdin = open("input.txt")
import collections
def bfs(me):
cnt = 0
my_f = [me]
# 내 친구들에 본인을 포함시키기 -> 밑에 while문에서 이유가 나옴.
s = collections.deque() # 조건에 맞는 친구들 저장소
# 나랑 바로 연결된 친구들만 my_f에 넣고 cnt도 올림(문제조건에 맞는친구니까)
for i in range(T):
if graph[me][i] == 'Y':
my_f.append(i)
s.append(i)
cnt += 1
# 나랑 바로 연결된 친구들의 친구(= 건너친구)를 구하기 위한 while문
# 현재 s에 있는 친구들이 바로 친구니까 이친구들의 건너친구들만 파악하면 딱 건너친구(2미만)이다.
while s:
temp = s.popleft()
# 바로친구의 친구들 탐색
for i in range(T):
# 내 바로 친구가 아니면서 / 바로친구의 친구이면
if i not in my_f and graph[temp][i] == 'Y':
cnt += 1
my_f.append(i) # 조건맞으면 내친구로 등록
return cnt
T = int(input())
graph = [list(input()) for _ in range(T)]
res = 0
for i in range(T):
res = max(res, bfs(i)) # 최대값으로 res 갱신
print(res)
Reference
この問題について([158]友人-コード解析), 我々は、より多くの情報をここで見つけました https://velog.io/@ase0574/1058-친구-코드-해석テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol