개발/algorithm
[백준 14395번] 4연산 -python
zzi_on2
2022. 1. 27. 11:38
문제 링크
https://www.acmicpc.net/problem/14395
14395번: 4연산
첫째 줄에 정수 s를 t로 바꾸는 방법을 출력한다. s와 t가 같은 경우에는 0을, 바꿀 수 없는 경우에는 -1을 출력한다. 가능한 방법이 여러 가지라면, 사전 순으로 앞서는 것을 출력한다. 연산의 아
www.acmicpc.net
풀이
- bfs 문제
- set()으로 방문 여부 확인
- 연산자마다 우선 순위 고려하여 우선 순위가 높은 순서부터 큐에 삽입
- 빼기 연산을 하게 되면 0이 되어 최종값을 만들 수 없으므로 고려하지 않아도 됨
from collections import deque
INF = int(10e9)
def bfs(s,t):
check.add(s)
q = deque()
q.append((s,""))
while q:
num, result = q.popleft()
# t와 같으면 결과 리턴
if num == t :
return result
# 범위에 포함되고 방문한 적이 없으면
tmp = num*num
if 0<= tmp <= INF and tmp not in check :
q.append((tmp, result + "*"))
check.add(tmp)
tmp = num+num
if 0<= tmp <= INF and tmp not in check :
q.append((tmp, result + "+"))
check.add(tmp)
# 나누기 연산하면 1이 됨
tmp = 1
if 1 not in check:
q.append((tmp, result+"/"))
check.add(1)
return -1
s, t = map(int,input().split())
# 방문 여부 확인
check = set()
if s == t :
print(0)
else :
print(bfs(s,t))