문제
숨바꼭질 (https://www.acmicpc.net/problem/1697)
풀이
1. 초기 접근
- 문제조건 해석
- 움직임, 경로에 대한 문제고, 간선의 길이가 1로 정해져있다.
- BFS 문제다.
- 움직임, 경로에 대한 문제고, 간선의 길이가 1로 정해져있다.
- 알고리즘
- 전체적으로 1697.숨바꼭질 과 동일한 문제다.
- 다만, 여기서 신경써야할 부분은,
버튼 B를 누르면 N에 2가 곱해진 뒤, 0이 아닌 가장 높은 자릿수의 숫자가 1 줄어든다.
이 부분이다.- 언어에 따라 다르게 처리할 수 있겠지만, 파이썬은 그래도
str()
이나int()
,.join()
을 통해 쉽게 처리할 수 있다. 아래 코드를 보면 된다.
- 언어에 따라 다르게 처리할 수 있겠지만, 파이썬은 그래도
- 코드
import sys
n, t, g = list(map(int, sys.stdin.readline().split()))
def bfs(n, t, g):
q, visited = [n], {n}
step = 0
while q:
size = len(q)
for i in range(size):
cur = q.pop(0)
if cur == g:
return step
if cur*2 > 99999:
next_move = [cur+1]
else:
m = list(str(cur*2))
m[0] = str(int(m[0])-1) if int(m[0])-1 > 0 else str(0)
m = int("".join(m))
next_move = [cur+1, m]
for j in next_move:
if j >= 0 and j <= 99999 and j not in visited:
q.append(j)
visited.add(j)
step += 1
if step > t:
break
return "ANG"
print(bfs(n, t, g))
'취업과 기본기 튼튼 > 코딩 테스트 노트' 카테고리의 다른 글
[BOJ ]7576. 토마토 (0) | 2019.04.07 |
---|---|
[BOJ] 2644. 촌수 계산 (0) | 2019.04.07 |
[BOJ] 1697. 숨바꼭질 (0) | 2019.04.07 |
[BOJ] 9466. 텀 프로젝트 (0) | 2019.04.07 |
[BOJ] 1405. 미친로봇 (0) | 2019.04.04 |