[๋ฐฑ์ค€-5567] ๊ฒฐํ˜ผ์‹ / Python

๐Ÿ“š Problem Solving/Baekjoon

 

5567๋ฒˆ: ๊ฒฐํ˜ผ์‹

์˜ˆ์ œ 1์˜ ๊ฒฝ์šฐ 2์™€ 3์€ ์ƒ๊ทผ์ด์˜ ์นœ๊ตฌ์ด๋‹ค. ๋˜, 3๊ณผ 4๋Š” ์นœ๊ตฌ์ด๊ธฐ ๋•Œ๋ฌธ์—, 4๋Š” ์ƒ๊ทผ์ด์˜ ์นœ๊ตฌ์˜ ์นœ๊ตฌ์ด๋‹ค. 5์™€ 6์€ ์นœ๊ตฌ๋„ ์•„๋‹ˆ๊ณ , ์นœ๊ตฌ์˜ ์นœ๊ตฌ๋„ ์•„๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 2, 3, 4 3๋ช…์˜ ์นœ๊ตฌ๋ฅผ ๊ฒฐํ˜ผ์‹์— ์ดˆ๋Œ€

www.acmicpc.net

import sys
from collections import deque

input = sys.stdin.readline

n = int(input())
m = int(input())
graph = [[] for _ in range(n + 1)]


def search(start):
    visited = [0] * (n + 1)
    visited[start] = 1
    queue = deque()
    queue.append((start, 0))
    answer = 0
    while queue:
        x, cnt = queue.popleft()
        for i in graph[x]:
            if visited[i] == 0 and cnt < 2:
                visited[i] = 1
                queue.append((i, cnt + 1))
                answer += 1
    return answer


for _ in range(m):
    a, b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)

print(search(1))

 

ํ•ด์„ค

์ƒ๊ทผ์ด์˜ ํ•™๋ฒˆ์ด 1์ด๊ธฐ ๋•Œ๋ฌธ์— search์— 1์„ ๋„˜๊ฒจ์ค˜ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. deque์—๋Š” ์นœ๊ตฌ์˜ ํ•™๋ฒˆ๊ณผ cnt๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. ์—ฌ๊ธฐ์„œ cnt๋Š” ๊ด€๊ณ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, cnt๊ฐ€ 1์ด๋ผ๋ฉด ์ง์† ์นœ๊ตฌ, cnt๊ฐ€ 2๋ผ๋ฉด ์นœ๊ตฌ์˜ ์นœ๊ตฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

visited ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ์™€ ์นœ๊ตฌ ๋˜๋Š” ์นœ๊ตฌ์˜ ์นœ๊ตฌ๋ผ๋Š” ์กฐ๊ฑด์ด ๋งŒ์กฑํ•˜๋ฉด deque์— ํ•™๋ฒˆ๊ณผ cnt๋ฅผ ์ €์žฅํ•˜๊ณ  answer๋ฅผ ํ•˜๋‚˜์”ฉ ๋Š˜๋ ค์ค€๋‹ค.