[BOJ / 백준] 1697번 숨바꼭질 파이썬(Python) 문제 풀이

2021. 10. 6. 14:17·Baekjoon
728x90

문제

 

문제 링크 : https://www.acmicpc.net/problem/1697

 

1697번: 숨바꼭질

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일

www.acmicpc.net

 

 

 

 

CODE

from collections import deque


def solve(n, k):
    time = [0] * (200001)
    q = deque([n])
    time[n] = 0

    while q:
        now = q.popleft()
        if now == k:
            print(time[k])
            return

        if abs(k - now) > abs(k - 2 * now) and time[2 * now] == 0:
            q.append(2 * now)
            time[2 * now] = time[now] + 1

        if now + 1 <= 100000 and time[now + 1] == 0:
            q.append(now + 1)
            time[now + 1] = time[now] + 1

        if now - 1 >= 0 and time[now - 1] == 0:
            q.append(now - 1)
            time[now - 1] = time[now] + 1


n, k = map(int, input().split())
solve(n, k)

 

 

 

 

 

풀이

💡 idea

- 시간 증가에 가중치가 없고 최단 시간을 찾는 문제이므로 BFS로 풀자!

 

 

💡 implementation

- Index Error 때문에 여러 번 틀렸다,,,

    * 문제의 힌트처럼 K 넘어서까지 이동해서 가는 경로가 최소일 때가 있으므로 time의 크기는 넉넉하게 MAX * 2

    * X2를 하는 순간이동은 이동했을 때 동생이랑 더 가까워지는 경우에만 하도록

    * +1 / -1 이동 또한 제한범위를 넘지 않도록

        if abs(k - now) > abs(k - 2 * now) and time[2 * now] == 0:
            q.append(2 * now)
            time[2 * now] = time[now] + 1

        if now + 1 <= 100000 and time[now + 1] == 0:
            q.append(now + 1)
            time[now + 1] = time[now] + 1

        if now - 1 >= 0 and time[now - 1] == 0:
            q.append(now - 1)
            time[now - 1] = time[now] + 1

 

 

 

 

 

 

결과

 

 

 

 

 

 

 

728x90
저작자표시 비영리 (새창열림)

'Baekjoon' 카테고리의 다른 글

[BOJ / 백준] 11724번 연결 요소의 개수 파이썬(Python) 문제 풀이  (0) 2021.10.06
[BOJ / 백준] 2606번 바이러스 파이썬(Python) 문제 풀이  (0) 2021.10.06
[BOJ / 백준] 2178번 미로 탐색 파이썬(Python) 문제 풀이  (0) 2021.10.06
[BOJ / 백준] 1303번 전쟁 - 전투 파이썬 (Python) 문제 풀이  (0) 2021.10.06
[BOJ / 백준] 1260번 DFS와 BFS 파이썬(Python) 문제 풀이  (0) 2021.10.06
'Baekjoon' 카테고리의 다른 글
  • [BOJ / 백준] 11724번 연결 요소의 개수 파이썬(Python) 문제 풀이
  • [BOJ / 백준] 2606번 바이러스 파이썬(Python) 문제 풀이
  • [BOJ / 백준] 2178번 미로 탐색 파이썬(Python) 문제 풀이
  • [BOJ / 백준] 1303번 전쟁 - 전투 파이썬 (Python) 문제 풀이
s_ih_yun
s_ih_yun
  • s_ih_yun
    CODESYUN
    s_ih_yun
  • 전체
    오늘
    어제
    • 분류 전체보기 (326)
      • Computer Science (26)
        • Concept (3)
        • Algorithm (23)
      • Web (54)
        • Web (7)
        • Spring (14)
        • MyBatis (1)
        • AWS (7)
        • HTML & CSS (14)
        • JavaScript (11)
      • Programming (37)
        • C++ (3)
        • Java (6)
        • Python (10)
        • MySQL (1)
        • Oracle (2)
        • Git (15)
        • Dev Tools (0)
      • Infra˙ DevOps (1)
      • Baekjoon (104)
        • 단계별로 풀어보기 (78)
      • CodeUp (98)
        • Python 기초 100제 (98)
      • Programmers (2)
      • Books (3)
      • etc (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • Syun's Pages
  • 인기 글

  • 태그

    github
    HTML
    git
    MySQL
    CodeUp 기초 100제
    java
    codeup
    Python
    SourceTree
    Programmers
    web
    Tistory
    알고리즘
    oracle
    clean code
    spring
    JavaScript
    VS Code
    c++
    aws
    단계별로 풀어보기
    BOJ
    CSS
    Cloud
    웹
    db
    myBatis
    자료구조
    C
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
s_ih_yun
[BOJ / 백준] 1697번 숨바꼭질 파이썬(Python) 문제 풀이
상단으로

티스토리툴바