fromzero
쪼렙 성장기
fromzero
전체 방문자
오늘
어제
  • Home
    • TIL
      • Python
      • HTML&CSS
      • Django
      • React
      • React Native
      • Git & Jira
      • Tech News
    • Algorithm
      • SW Expert Amademy
      • Baekjoon Online Judge
    • SSAFY
    • Daily log

인기 글

최근 댓글

최근 글

글쓰기 | 설정
hELLO · Designed By 정상우.
fromzero

쪼렙 성장기

백준 1697. 숨바꼭질(파이썬)
Algorithm/Baekjoon Online Judge

백준 1697. 숨바꼭질(파이썬)

2022. 3. 27. 19:42

이미지 클릭 시 문제로 이동합니다.

 

문제
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다.
수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오.

입력
첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.

출력
수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.

 

아이디어

1. 일직선 상에서 움직이는 것 => 1차원 배열
2. 최소 시간을 찾아야 하므로, BFS(너비 우선 탐색)를 쓰는 것이 좋다
3. 테스트 케이스를 돌려 볼 수 있도록 일단 작은 범위에서 탐색하고, 최종 제출할 때 범위를 100000으로 늘려주자
4. 방문 배열은 꼭 100001까지!

 

문제 코드

from collections import deque
# deque를 사용하면 시간을 줄일 수 있다

def bfs(n, k):
    queue = deque()
    visited = [0 for _ in range(100001)] # 인덱스 에러 주의!
    visited[n] = 1 # 방문 표시
    queue.append(n)
    while queue:
        size = len(queue)
        for _ in range(size):
            now_n = queue.popleft()
            if now_n == k: # 동생 만났으면
                return print(visited[now_n] - 1)
            # 못 만났으면 걷거나 순간이동해야지 (탐색하기)
            # 걷기
            for d in [-1, 1]: # 앞으로 한 칸 또는 뒤로 한 칸
                next_n = now_n + d
                # 범위 안에 있고, 방문한 적이 없어야 함
                if 0 <= next_n <= 100000 and visited[next_n] == 0:
                    visited[next_n] = visited[now_n] + 1
                    queue.append(next_n)
            # 순간 이동
            next_n = now_n * 2
            # 범위 안에 있고, 방문한 적이 없어야 함
            if 0 <= next_n <= 100000 and visited[next_n] == 0:
                visited[next_n] = visited[now_n] + 1
                queue.append(next_n)

N, K = map(int, input().split())
maps = [0 for _ in range(100000)]

bfs(N, K)

 

저작자표시 비영리 변경금지 (새창열림)

'Algorithm > Baekjoon Online Judge' 카테고리의 다른 글

백준 2477. 참외밭 (파이썬)  (0) 2022.02.28
백준 10163. 색종이 (파이썬/ 47, 52점 해결법)  (0) 2022.02.27
백준 14696. 딱지놀이 (파이썬)  (0) 2022.02.27
백준 2605. 줄 세우기 (파이썬)  (0) 2022.02.27
백준 2563. 색종이 (파이썬)  (0) 2022.02.27
    'Algorithm/Baekjoon Online Judge' 카테고리의 다른 글
    • 백준 2477. 참외밭 (파이썬)
    • 백준 10163. 색종이 (파이썬/ 47, 52점 해결법)
    • 백준 14696. 딱지놀이 (파이썬)
    • 백준 2605. 줄 세우기 (파이썬)
    fromzero
    fromzero

    티스토리툴바