1931번 회의실 배정
BFS
실버 I
💡문제 분석 요약
BFS or math
💡알고리즘 설계
queue에 n값을 추가한 뒤, k값이 될 수 있는 방법을 각각 넣어서 확인한다.
이때, 재방문하지않도록 visit이라는 배열로 방문 여부를 확인한다.
💡코드
from collections import deque
n,k = map(int,input().strip().split())
queue = deque()
queue.append(n)
answer =0
visit = [False for _ in range(100001)]
while queue:
new = deque()
for i in range(len(queue)):
n = queue.popleft()
if n==k:
break;
visit[n] = True
for i in [n*2,n+1,n-1]:
if 0<=i<100001 and not visit[i]:
new.append(i)
if n == k:
break;
queue = new
answer += 1
print(answer)
💡시간복잡도
i의 N과 j 의 N O(n^2)
💡 다른 코드
복잡하게 풀지 않고 수학적으로 풀 수 있다.
def solution(N,K):
if K <= N: return N-K
elif K == 1: return 1
elif K % 2 == 0: return min(K-N,solution(N,K//2)+1)
else: return min(solution(N,K+1)+1, solution(N,K-1)+1)