Recent Posts
Recent Comments
라떼는말이야
[solved.ac 실버2] 1058_친구 (파이썬, 브루트포스, 그래프) 본문
반응형
문제
지민이는 세계에서 가장 유명한 사람이 누구인지 궁금해졌다. 가장 유명한 사람을 구하는 방법은 각 사람의 2-친구를 구하면 된다. 어떤 사람 A가 또다른 사람 B의 2-친구가 되기 위해선, 두 사람이 친구이거나, A와 친구이고, B와 친구인 C가 존재해야 된다. 여기서 가장 유명한 사람은 2-친구의 수가 가장 많은 사람이다. 가장 유명한 사람의 2-친구의 수를 출력하는 프로그램을 작성하시오.
A와 B가 친구면, B와 A도 친구이고, A와 A는 친구가 아니다.
입력
첫째 줄에 사람의 수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 각 사람이 친구이면 Y, 아니면 N이 주어진다.
출력
첫째 줄에 가장 유명한 사람의 2-친구의 수를 출력한다.
예제
나의 풀이
DFS나 BFS로 풀 수도 있겠지만 N이 50보다 작은 자연수이기 때문에 세제곱을 해도 시간 내에 충분히 풀 수 있을 것이라 생각되어 모든 경우를 탐색하는 브루트포스 방식으로 풀이했다.
풀이는 코드의 주석만 해도 충분히 설명할 수 있다고 생각되어 주절 주절 적진 않겠다.
n = int(input())
arr = [list(input()) for _ in range(n)]
answer = 0
for i in range(n): # 모든 경우 탐색
friend = 0
for j in range(n): # i와 j가 친구인가?
if i == j: continue # 나는 나와 친구가 될 수 없다...
if arr[i][j] == 'Y': # i와 j가 친구다
friend += 1
elif arr[i][j] == 'N': # i와 j가 친구가 아니다
for k in range(n): # j의 친구들 탐색
if arr[j][k] == 'Y' and arr[i][k] == 'Y': # j와 k가 친구고, i와 k도 친구다
friend += 1
break # 2-친구가 한 명이라도 있으면 더 찾지 않는다
answer = max(answer, friend)
print(answer)
반응형
'알고리즘 > 코딩 테스트' 카테고리의 다른 글
[프로그래머스 lv3] 표 편집 (파이썬, 문자열, LinkedList) (0) | 2022.05.06 |
---|---|
[프로그래머스 lv2] 배달 (파이썬, 최단 거리 탐색, 다익스트라) (0) | 2022.05.05 |
[프로그래머스 lv2] 주차 요금 계산 (파이썬, 문자열, 구현) (0) | 2022.05.04 |
[solved.ac 골드5] 1501_영어 읽기 (파이썬, 문자열, 해시맵) (2) | 2022.04.24 |
[solved.ac 실버1] 16918_봄버맨 (파이썬, 그래프) (2) | 2022.04.15 |
[solved.ac 골드4] 1229_육각수 (파이썬, DP) (0) | 2022.04.15 |
[solved.ac 실버2] 1890_점프 (파이썬, DP) (0) | 2022.04.13 |
[solved.ac 실버2] 1912_연속합 (파이썬, DP) (0) | 2022.04.13 |
Comments