:pencil2: 코드

import sys
# sys.stdin = open("input.txt")
input = sys.stdin.readline
from collections import deque


def bfs(start):
    global check
    q = deque()
    q.append(start)
    color[start] = 0

    while q:
        cur = q.popleft()
        for node in arr[cur]:
            if color[node] == -1:
                color[node] = (color[cur] + 1) % 2
                q.append(node)
            else:
                if color[node] == color[cur]:
                    check = True



T = int(input())
for _ in range(T):
    n, m = map(int, input().split())
    arr = [[] for _ in range(n + 1)]
    color = [-1] * (n + 1)
    for _ in range(m):
        a, b = map(int, input().split())
        arr[a].append(b)
        arr[b].append(a)
    check = False
    for i in range(1, n + 1):
        if color[i] == -1:
            bfs(i)
            if check:
                break

    if check:
        print("impossible")
    else:
        print("possible")

:star: 풀이

오늘부터 오전 알고리즘 스터디를 시작했다!! 무려 오전 8시부터 진행!!! :fire::fire: 첫날이라 그런지 머리가 안돌아갔다(핑계) 위 문제를 결국 시간안에 못풀었는데 단순 이중 for문으로 해결 가능하다고 생각했었다. 하지만 최대한 안겹치게 색을 칠해주려면 먼저 이어져 있는 노드들부터 색을 채워나가야하기 때문에 bfs로 푸는게 맞았다. 스터디 첫날이였는데 다들 좋으신분 같다! :smile: 내일도 파이팅!!

댓글남기기