소스 코드

def bfs(i,j):
    while len(temp) != 0:
        ni,nj = temp.pop(0)

        for qq in range(1,n+1):
            if board[ni][qq] == 1:
                board[ni][qq] = 0
                board[qq][ni] = 0
                visited[qq] = 1
                visited[ni] = 1
                temp.append([ni,qq])

            if board[nj][qq] == 1:
                board[nj][qq] = 0
                board[qq][nj] = 0
                visited[qq] = 1
                visited[nj] = 1
                temp.append([nj,qq])

    return

# tc 개수
T = int(input())

for tc in range(1,1+T):
    # 주민 수, 관계 수
    n,m = map(int,input().split())

    # 관계
    items = [list(map(int,input().split())) for _ in range(m)]

    # 관계들 저장해서 for문 돌지 않기 위함
    board = [[0]*(n+1) for _ in range(n+1)]

    # 관계가 나오지 않은 곳을 찾기 위해
    visited = [1]+[0]*n

    # 무리의 수
    cnt = 0

    # 관계가 확인된 곳 저장
    for q in items:
        board[q[0]][q[1]] = 1
        board[q[1]][q[0]] = 1

    for w in items:
        # 관계가 확인된 곳이면
        if board[w[0]][w[1]] == 1:
            
            # 무리의 수 + 1 및 board 초기화, visited 변경
            cnt += 1
            temp = [[w[0],w[1]]]
            board[w[0]][w[1]] = 0
            board[w[1]][w[0]] = 0
            visited[w[0]] = 1
            visited[w[1]] = 1
            bfs(w[0],w[1])

    # 무리의 숫자 + 관계가 나오지 않은 곳들의 수(사람 하나가 하나의 무리)
    res = cnt + visited.count(0)

    print('#{} {}'.format(tc,res))

 


해결 방법

1. 관계가 나오지 않은 사람들도 존재할 수 있음을 명심해야 한다

ex) 4 1

     1 4가 input으로 주어졌을 때, 무리의 수는 [1,4] , [2], [3] 3이다.

 

2. 이를 따로 확인하기 위해 visited를 추가해서 문제 해결


느낀 점

함정을 조심하자!

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.