Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 브루트포스
- 13164
- 트리
- 맵
- 2357
- 문자열
- 이분 탐색
- 플로이드-워셜
- 그래프
- 그리디
- 싸피
- boj
- 정렬
- 누적 합
- 정수론
- 세그먼트 트리
- DFS
- 슬라이딩 윈도우
- JavaScript
- BFS
- 애드 혹
- 구현
- SSAFY
- 해시 테이블
- Python
- 투 포인터
- DP
- 에라토스테네스의 체
- 수학
- 모던 JavaScript 튜토리얼
Archives
- Today
- Total
흙금이네 블로그
[BOJ] 6118 - 숨바꼭질 (Python, JavaScript) 본문
아이디어
BFS로 1번 헛간과 거리가 가장 먼 헛간들을 찾는다.
풀이 #1 (Python)
방문 표시 및 1번 헛간과의 거리를 저장하기 위해 N+1 크기의 0으로 채워진 리스트 visited를 생성한다.
visited에서 1번 헛간의 값을 1로 저장하고, 큐 queue에 1을 저장한다.
while문에서 BFS로 방문하지 않은 주변 헛간으로 이동하며 visted에 1번 헛간과의 거리보다 1 더 큰 값을 저장한다.
모든 헛간을 방문한 후 for문에서 숨어야 하는 헛간 번호 num, 해당 헛간까지의 거리 d, 같은 거리의 헛간 수 cnt를 구한다.
import sys
input = sys.stdin.readline
def solution():
N, M = map(int, input().split())
graph = [[] for _ in range(N+1)]
visited = [0]*(N+1)
for _ in range(M):
A, B = map(int, input().split())
graph[A].append(B)
graph[B].append(A)
visited[1] = 1
queue = [1]
while queue:
idx = queue.pop(0)
for i in graph[idx]:
if visited[i] == 0:
visited[i] = visited[idx]+1
queue.append(i)
num = d = cnt = 0
for i in range(2, N+1):
if visited[i]-1 > d:
d = visited[i]-1
cnt = 1
num = i
elif visited[i]-1 == d:
cnt += 1
print(num, d, cnt)
solution()
풀이 #2 (JavaScript)
풀이 #1과 마찬가지 방식으로 동작한다.
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split('\n');
const [N, M] = input[0].split(' ').map(Number);
let graph = Array.from(Array(N+1), () => []);
for (let i=1; i<=M; i++) {
const [A, B] = input[i].split(' ').map(Number);
graph[A].push(B);
graph[B].push(A);
}
let visited = Array(N+1).fill(0);
visited[1] = 1;
let queue = [1];
while (queue.length) {
const idx = queue.shift();
for (let i of graph[idx]) {
if (visited[i] == 0) {
visited[i] = visited[idx]+1;
queue.push(i);
}
}
}
let num = d = cnt = 0;
for (let i=2; i<=N; i++) {
if (visited[i]-1 > d) {
d = visited[i]-1;
cnt = 1;
num = i;
}
else if (visited[i]-1 == d) cnt += 1;
}
console.log(num, d, cnt);
'알고리즘' 카테고리의 다른 글
[BOJ] 5547 - 일루미네이션 (Python, JavaScript) (0) | 2023.03.11 |
---|---|
[BOJ] 17836 - 공주님을 구해라! (Python, JavaScript) (0) | 2023.03.10 |
[BOJ] 18404 - 현명한 나이트 (Python, JavaScript) (0) | 2023.03.09 |
[BOJ] 15558 - 점프 게임 (Python, JavaScript) (0) | 2023.03.07 |
[BOJ] 1904 - 01타일 (Python) (0) | 2023.03.06 |
Comments