# 1058 친구 def dfs(idx): global N visited = [True]*N visited[idx] = False stack = [(idx,0)] cnt = -1 while stack: cu_x,both_person = stack.pop() for x in range(N): if arr[cu_x][x] == 'Y': if visited[x] and both_person <= 1: visited[x] = False stack.append((x,both_person+1)) cnt += 1 return cnt N = int(input()) arr = [list(input()) for _ in range(N)] max_number = 0 for i in range(N): temp = dfs(i) max_number = max(max_number,temp) print(max_number)
이 문제는 DFS를 이용해서 풀었다.
이 문제에서 2-친구가 되는 경우는 2종류이다.
1. 직접적인 친구인 경우
2. 한 다리를 건너서 친구가 되는 경우
총 2가지이다.
이것을 구분해주기 위해 both_person이라는 변수로 징검다리 친구가 되는 경우를 찾아줬따.
이 변수 없이 진행 시, 연결된 모든 친구들이 출력되기 때문에, 최대 거리가 2이하인 경우만 구분해줄려고 썼다.
이 문제를 풀고 난뒤에 대부분의 사람들이 플로이드 와샬로 풀었다는 경우가 많지만,
아직 플로이드 와샬 알고리즘에 대해 잘 모르기 때문에 그 방법은 나중에 알고리즘을 배우면 시도 해봐야겠다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ] 5569 출근 경로 (0) | 2021.01.15 |
---|---|
[BOJ] 2140 지뢰찾기 (0) | 2021.01.15 |
[BOJ] 10884 쉬운 계단 수 (0) | 2021.01.14 |
[BOJ] 1149 RGB 거리 (0) | 2021.01.14 |
[BOJ] 12865 평범한 배낭 (0) | 2021.01.14 |