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 | 31 |
Tags
- python
- FastAPI
- pytorch
- PytorchLightning
- GitHub Action
- datascience
- 코딩테스트
- 백준
- github
- wandb
- rnn
- NLP
- 알고리즘
- torchserve
- NaverAItech
- 완전탐색
- DeepLearning
- Kaggle
- Kubernetes
- Matplotlib
- GCP
- 프로그래머스
- GIT
- docker
- FDS
- vscode
- pep8
- 네이버AItech
- leetcode
- autoencoder
Archives
- Today
- Total
Sangmun
백준 12851번 숨바꼭질2 본문
https://www.acmicpc.net/problem/12851
BFS를 이용한 숨바꼭질 문제 시리즈 중에 하나이다.
숨바꼭질 시리즈에서 최단 경로를 구하는 문제의 솔루션을 약간 변형을 하였다.
엣지 케이스를 처리하는 로직을 포함하지 않고 제출을 하지 엣지 케이스 때문에 시간초과가 난다는 문제가 있었다.
import sys
from collections import deque
input = sys.stdin.readline
n,k = map(int,input().split())
# 엣지 케이스를 위한 if문
if n > k:
print(n - k)
print(1)
else:
visited = [0]*100001
q = deque()
q.append((n,[n]))
count = 0
Shortest_time = 1e9
while q:
a, SP = q.popleft()
# 이미 거쳐온 경로가 현재 최단 경로보다 크면 패스
if not (len(SP) -1 <= Shortest_time):
continue
if a == k:
if len(SP) - 1 <= Shortest_time:
Shortest_time = len(SP) - 1
count += 1
visited[a] = 1
for each in [2,1,-1]:
tmp = a
if each == 2:
if 0 <= tmp*each <= 100000:
if not visited[tmp*each]:
q.append((tmp*each,SP + [tmp*each]))
else:
if 0 <= tmp + each <= 100000:
if not visited[tmp + each]:
q.append((tmp + each,SP +[tmp + each]))
print(Shortest_time)
print(count)
'알고리즘 > 백준' 카테고리의 다른 글
백준 9935번 문자열 폭발 (0) | 2022.12.14 |
---|---|
백준 17144번 미세먼지 안녕! (0) | 2022.12.14 |
백준 2096번 내려가기 (0) | 2022.12.12 |
백준 15686번 치킨 배달 (0) | 2022.12.12 |
백준 14938번 서강그라운드 (0) | 2022.12.10 |
Comments