[ BOJ / Python ] 14395번 4연산

황승환·2022년 8월 20일
0

Python

목록 보기
456/498

이번 문제는 BFS를 통해 해결하였다. 우선 수의 범위가 10억이기 때문에 set()을 통해 방문처리를 하였고, -연산은 무조건 0이 나오기 때문에 따로 처리하지 않았다(s와 t의 범위는 1부터 시작이기 때문에 0을 요구하는 경우는 없다). 아스키코드 오름차순으로 가장 빠른것을 출력해야 하기 때문에 BFS 탐색 내에서 반드시 *, +, / 순으로 진행하도록 하였다. 그리고 t와 같아지면 바로 그동안 저장한 연산자들을 반환하였다.

Code

from collections import deque
s, t = map(int, input().split())
def four_operations():
    q = deque()
    q.append((s, []))
    visited = set()
    visited.add(s)
    while q:
        cur, opers = q.popleft()
        if cur == t:
            return ''.join(opers)
        nxt = cur*cur
        if 0 <= nxt <= 10e9 and nxt not in visited:
            visited.add(nxt)
            q.append((nxt, opers+['*']))
        nxt = cur+cur
        if 0 <= nxt <= 10e9 and nxt not in visited:
            visited.add(nxt)
            q.append((nxt, opers+['+']))
        if cur != 0:
            nxt = cur//cur
            if nxt not in visited:
                visited.add(nxt)
                q.append((nxt, opers+['/']))
    return -1
answer = four_operations()
if not answer:
    answer = 0
print(answer)

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글