[Python] 백준 - 숨바꼭질 (1697번)

yunyoung·2021년 2월 24일
1

알고리즘

목록 보기
27/41

문제 설명

📃 문제 링크

문제

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다.

수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오.

입력

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

출력

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

예제 입력1**

5 17

예제 출력1

4

문제 풀이🌈

쉬운 문제라고 생각했는데, 메모리 초과와 시간 초과에 뚜드려 맞았다. 😂

문제에 주어진 변수의 범위를 제대로 보지 않아서였다. 문제에서 NK0부터 최대 100000까지의 값을 가질 수 있는데 수빈이가 이동할 수 있는 위치도 저 범위 안에 있는지 확인해주어야 한다.

if a in visited 처럼 하면 O(n)의 시간복잡도가 걸리기 때문에, 시간을 줄이기 위해서 dictionary를 쓰거나 처음부터 visited를 최대 크기까지 모두 0으로 초기화해주는 방법을 사용해야 한다.

소스 코드

visitedDictionary 를 사용하는 코드 : 메모리 35008KB, 시간 160ms

visited를 최대 크기만큼 0으로 초기화해주는 코드 : 메모리 44744KB, 시간 184ms

profile
🌈TIL과 개발 노트

0개의 댓글