📃 문제 링크
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다.
수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오.
첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.
수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.
5 17
4
쉬운 문제라고 생각했는데, 메모리 초과와 시간 초과에 뚜드려 맞았다. 😂
문제에 주어진 변수의 범위를 제대로 보지 않아서였다. 문제에서 N
과 K
는 0
부터 최대 100000
까지의 값을 가질 수 있는데 수빈이가 이동할 수 있는 위치도 저 범위 안에 있는지 확인해주어야 한다.
또 if a in visited
처럼 하면 O(n)의 시간복잡도가 걸리기 때문에, 시간을 줄이기 위해서 dictionary
를 쓰거나 처음부터 visited
를 최대 크기까지 모두 0
으로 초기화해주는 방법을 사용해야 한다.
visited
에 Dictionary
를 사용하는 코드 : 메모리 35008KB, 시간 160ms
visited
를 최대 크기만큼 0
으로 초기화해주는 코드 : 메모리 44744KB, 시간 184ms