💡문제접근
- 이전에 포스팅했던 [[백준] 9019번 DSLR]과 거의 비슷한 유형의 문제였다.
- N은 20000보다 작거나 같은 자연수이므로 방문 여부 배열의 크기를 20,000으로 잡아준다.
- 큐에 [현재 숫자, 만들어진 숫자(문자열 형태)] 형태로 넣어주면서 0 혹은 1을 하나씩 붙여나가면서 만들 수 있는 수가 N의 배수라면 현재 숫자를 리턴해주고 만약 만들어진 숫자의 길이가 100을 초과하면 "BRAK"를 리턴한다.
💡코드(메모리 : 34120KB, 시간 : 76ms)
from collections import deque
import sys
input = sys.stdin.readline
def BFS(N):
queue = deque([(1, "1")])
visited = [False] * 20001
visited[1] = True
while queue:
current_num, current_str = queue.popleft()
if current_num % N == 0:
return current_str
if len(current_str) > 100:
return "BRAK"
if not visited[((current_num * 10) + 1) % N]:
visited[((current_num * 10) + 1) % N] = True
queue.append([(((current_num * 10) + 1) % N), current_str + "1"])
if not visited[(current_num * 10) % N]:
visited[(current_num * 10) % N] = True
queue.append([((current_num * 10) % N), current_str + "0"])
return "BRAK"
T = int(input())
for i in range(T):
N = int(input().strip())
print(BFS(N))
💡소요시간 : 2h