cmod.ify

[16953] A -> B 본문

BASIC/코딩테스트

[16953] A -> B

modifyC 2026. 1. 15. 11:19
728x90
반응형

초안

메모리 초과가 난 코드

10억개의 메모리를 생성하려고해서 메모리 초과가 났다

 BFS로 만들었었다.

import sys
from collections import deque

input = sys.stdin.readline

A, B = map(int, input().strip().split())

num = [sys.maxsize for _ in range(B + 1)]

answer = -1

q = deque([A])
num[A] = 1
while q:
    cur = q.popleft()
    # 정답인지 검사
    if cur == B:
        answer = num[cur]
        break
    # *2를 했을 때 b보다 안커지는지 검사
    elif cur > B:
        q.popleft()
        continue
    nxt = cur * 2
    if nxt > B:
        continue
    else:
        num[nxt] = min(num[nxt], num[cur] + 1)
        q.append(nxt)
    # +1을 했을 때 b보다 안커지는지 검사
    nxt = int(str(cur) + "1")
    if nxt > B:
        continue
    else:
        num[nxt] = min(num[nxt], num[cur] + 1)
        q.append(nxt)

print(answer)

 

큐에 횟수를 넣으라는 재미나이의 힌트를 받아 수정해서 제출했더니 맞았다.

추가로 다른 아이디어로 그리디방식으로 B -> A로 하면 더 편하다는 제안도 받았었지만 이미 BFS로 다 만들어 놨기 때문에 그냥 이렇게 만들었다.

import sys
from collections import deque

input = sys.stdin.readline

A, B = map(int, input().strip().split())

answer = -1

q = deque([(A, 1)])
while q:
    cur, cnt = q.popleft()
    # 정답인지 검사
    if cur == B:
        answer = cnt
        break
    # *2를 했을 때 b보다 안커지는지 검사
    elif cur > B:
        q.popleft()
        continue
    nxt = cur * 2
    if nxt > B:
        continue
    else:
        q.append((nxt, cnt + 1))
    # +1을 했을 때 b보다 안커지는지 검사
    nxt = int(str(cur) + "1")
    if nxt > B:
        continue
    else:
        q.append((nxt, cnt + 1))

print(answer)
728x90
반응형

'BASIC > 코딩테스트' 카테고리의 다른 글

[1629] 곱셈  (0) 2026.01.16
[1149] RGB 거리  (0) 2026.01.15
[9019] DSLR  (0) 2026.01.13
[7662] 이중 우선순위 큐  (0) 2026.01.13
[16928] 뱀과 사다리 게임  (2) 2026.01.09