보글보글 개발일지
article thumbnail
Published 2024. 2. 1. 11:34
[백준/1058][Python] 친구 알고리즘
반응형

문제

https://www.acmicpc.net/problem/1058

 

1058번: 친구

지민이는 세계에서 가장 유명한 사람이 누구인지 궁금해졌다. 가장 유명한 사람을 구하는 방법은 각 사람의 2-친구를 구하면 된다. 어떤 사람 A가 또다른 사람 B의 2-친구가 되기 위해선, 두 사람

www.acmicpc.net

풀이

문제 이해부터 하자면, 2-친구라고 말해서 좀 복잡한데 그냥 A-B가 친구이거나 / A-B가 친구가 아니여도 A, B에게 C라는 공통된 친구가 있으면 A-B가 친구가 된다. (A-C, B-C친구 -> A-B친구) 

이 문제에는 다양한 풀이법이 있다. 아무래도 n이 최대 50이라 완전탐색, O(n^3)에도 문제 해결이 가능하다.

  • BFS :여기 정리가 잘 되어있는데 나는 잘 이해가 안된다ㅠ.ㅜ https://fre2-dom.tistory.com/159
  • 플로이드-워셜: 사실 그냥 그래프로 풀었는데 찾아보니 플로이드랑 비슷

코드

n = int(input())
r = []
ans = [0]*n
for i in range(n):
  s = input()
  r.append(s)
#print(r)

for i in range(n):
  for j in range(n):
    if r[i][j] == 'Y': #Y인 경우 일단 ans에 값 카운팅
      ans[i] += 1
    elif i!=j: #친구가 아닌 경우 겹치는 친구가 있나 확인
      for k in range(n):
        if r[i][k] == 'Y' and r[j][k] == 'Y':
          ans[i] += 1
          break
print(max(ans))

회사 외부망엔 파워포인트가 없네...

표를 문자 그대로 저장한다.
그리고 0~4의 친구들을 각각 차례대로 확인해준다. 
만약 Y인게 있으면 바로 ans[0]의 값을 1 증가시켜준다. - (0,1)의 경우 Y이므로 바로 친구 수 증가
그런데 N이라면? 겹치는 친구가 있나 확인해줘야 한다. - (0,2)의 경우 N이므로 0의 친구, 2의 친구를 모두 확인해 겹치는 친구가 있는지 확인해준다. (0,1), (2,1)가 모두 Y이기 때문에 0과 2는 겹치는 친구 1이 존재한다. 

 

반응형

'알고리즘' 카테고리의 다른 글

[백준/1912][Python] 연속합  (1) 2024.02.11
[백준/1987][Python] 알파벳  (1) 2023.10.28
[백준/2294][Python] 동전2  (0) 2023.10.26
[프로그래머스/181188][C++] 요격 시스템  (0) 2023.10.21
[백준/17298][C++] 오큰수  (1) 2023.10.21
profile

보글보글 개발일지

@보글

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!