[Baekjoon] #6118 숨바꼭질

SunYerim·2023년 1월 27일
0

자료구조, 알고리즘

목록 보기
10/16
post-thumbnail

문제

재서기는 수혀니와 교외 농장에서 숨바꼭질을 하고 있다. 농장에는 헛간이 많이 널려있고 재서기는 그 중에 하나에 숨어야 한다. 헛간의 개수는 N(2 <= N <= 20,000)개이며, 1 부터 샌다고 하자.
재서기는 수혀니가 1번 헛간부터 찾을 것을 알고 있다. 모든 헛간은 M(1<= M <= 50,000)개의 양방향 길로 이어져 있고, 그 양 끝을 A_i 와 B_i(1<= A_i <= N; 1 <= B_i <= N; A_i != B_i)로 나타낸다. 또한 어떤 헛간에서 다른 헛간으로는 언제나 도달 가능하다고 생각해도 좋다.
재서기는 발냄새가 지독하기 때문에 최대한 냄새가 안나게 숨을 장소를 찾고자 한다. 냄새는 1번 헛간에서의 거리(여기서 거리라 함은 지나야 하는 길의 최소 개수이다)가 멀어질수록 감소한다고 한다. 재서기의 발냄새를 최대한 숨길 수 있는 헛간을 찾을 수 있게 도와주자!

입력 및 출력

내가 생각한 logic 및 코드

'''logic
    1. bfs로 푸는 것 같음.
    2. 1번 헛간부터 탐색하며 방문 거리 체크
	3. 체크한 방문 거리 토대로 출력값 예시 수행'''
from collections import deque

# bfs 탐색
def bfs(v):
    queue = deque([v])
    
    visited[v] = 1

    while queue:
        target = queue.popleft()
        # 연결된 헛간을 확인.
        for i in graph[target]:
            # 방문하지 않은 헛간이라면 방문한다.
            if visited[i] == 0:
                # 방문 거리를 체크
                visited[i] = visited[target] + 1
                queue.append(i)

# n, m 입력받음
n, m = map(int, input().split())

# 노드 방문 여부와 순서 확인
visited = [0 for i in range(n+1)]

# 각 연결된 노드를 표현
graph = [[] for _ in range(n+1)]

# 각 그래프 연결 관계
for _ in range(m):
    a, b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)

# 1번 헛간부터 탐색 시작!
bfs(1)

# 최대 값의 인덱스 값 출력, 첫번째 헛간을 1로 두었기 때문에 최대값에서 1을 빼준 값을 출력, 최대 값의 개수 출력
print(visited.index(max(visited)), max(visited) - 1, visited.count(max(visited)))
profile
내 안에 있는 힘을 믿어라.

0개의 댓글