[Boj문제풀이]

[Boj/백준] 6118 Python

ki7348 2021. 9. 27. 19:56

문제출처: https://www.acmicpc.net/problem/6118

 

6118번: 숨바꼭질

재서기는 수혀니와 교외 농장에서 숨바꼭질을 하고 있다. 농장에는 헛간이 많이 널려있고 재서기는 그 중에 하나에 숨어야 한다. 헛간의 개수는 N(2 <= N <= 20,000)개이며, 1 부터 샌다고 하자.   재

www.acmicpc.net

 

1. 문제 접근 방식

문제를 이해하는데 살짝 시간이 걸렸다.

일단 2차원 DFS/BFS문제가 아닌 것을 확인했다.

그래프를 1,n+1까지 각 노드와 연결된 원소들을 나타내는 꼴로 만들었다.

BFS를 돌면서

total이라는 배열에 값을 1씩 더해줬다.

 

 

2. 내가 푼 코드

import sys
from collections import deque

def bfs(graph,visited):
    queue = deque([1])
    visited[1] = True
    total = [0]*(n+1)

    while queue:
        v = queue.popleft()
        for i in graph[v]:
            if not visited[i]:
                total[i] = total[v]+1
                queue.append(i)
                visited[i] = True
    return total

n, m = map(int,sys.stdin.readline().split())

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


for _ in range(m):
    u, v = map(int, sys.stdin.readline().split())
    graph[u].append(v)
    graph[v].append(u)

result = bfs(graph,[False]*(n+1))

a = result.index(max(result))
b = result[a]
c = result.count(max(result))

print(a,b,c)

 

 

3. 결과 및 느낀점

우선 2차원 BFS문제가 아니라 1차원 BFS 문제일 경우에 visited배열을 사용하기 마련인데

visited 배열과 graph 배열은 무조건 매 함수 호출마다 인자에 넣는 방식을 사용해서 초기화 시켜주자

그리고 ~의 합을 구하는 문제면

bfs 함수안에 total처럼 배열을 만들어서 i in graph[v]일 때 total[i]에 이전 값+1과 같은 연산을 시켜주자.

비슷한 문제는 비슷하게 빨리 푸는 것이 중요할 것 같다. ex)boj1389

'[Boj문제풀이]' 카테고리의 다른 글

[Boj/백준] 7576 Python  (0) 2021.09.29
[Boj/백준] 22352 Python  (0) 2021.09.28
[Boj/백준] 1303 Python  (0) 2021.09.27
[Boj/백준] 1743 Python  (0) 2021.09.26
[Boj/백준] 3187 Python  (0) 2021.09.24