여니의 취준 준비/코딩테스트 (Python)

[n1058] 친구 in python

여니's 2021. 10. 15. 17:01


아휴 이 문제는 이해하는 것부터 힘들었다 ^.^;

말장난에 놀아난 1인.. 나야 나..

 

visited를 1차원 배열로 하려고 했는데 계속 오류가 났다

결국 더 보기 편하게 2차원으로 걍 쪼개버렸다

 

A B C 친구가 있다.

2-친구가 되기 위한 조건은 총 2가지

1. A, B가 서로 친구

or

2. A와 C, B와 C가 친구인 경우

 

 

아래 예시로 살펴보면

A와 B가 친구

-> 2-친구 조건1 만족o

 

 

A와 C가 친구 x

-> 조건1 만족x, 

그러면 조건 2를 살펴본다.

A와 B가 친구이고 C와 B가 친구이므로

A와 C도 친구가 될 수 있다. -> 조건2 만족o

 

**

fucn 함수 안에 있는 조건문에서 인덱스 순서가 바뀌어도 상관 없었다

A->B랑 친구이면 B->A도 친구이기 때문!

# 두사람이 친구 or (A와 친구 and B와 친구인 C가 존재해야한다)
n = int(input())
arr = [input() for _ in range(n)]
visited = [[0 for _ in range(n)] for _ in range(n)]


# 2-친구가 서로 연결되어 있는지 확인하는 함수
def func(idx, i):
    for a in range(n):
        # b랑 연결된 친구들 개수대로 visited[idx]에 더해줄거야
        if arr[i][a] == "Y" and arr[idx][a] == "Y":
            visited[idx][i] = 1
            return True


for idx in range(n):  # focus num
    for i in range(n):  # moving num
        if i == idx:
            continue
        if arr[idx][i] == "Y" or func(idx, i):  # Y
            visited[idx][i] = 1
            continue


ans=0
for i in visited:
    ans=max(ans,sum(i))
print(ans)

 

 

'여니의 취준 준비 > 코딩테스트 (Python)' 카테고리의 다른 글

[n1292] 쉽게 푸는 문제 in python  (0) 2021.10.18
[n11655] ROT13 in python  (0) 2021.10.18
[n1904] 01타일 in python  (0) 2021.10.15
[n1026] 보물 in python  (0) 2021.10.13
[n1021] 회전하는 큐 in python  (0) 2021.10.13