[ BOJ / Python ] 15658번 연산자 끼워넣기 (2)

황승환·2021년 9월 10일
0

Python

목록 보기
4/498

[ BOJ / C++ ] 15658번 연산자 끼워넣기 (2)
파이썬으로도 해결해보았다. C++ 코드와 조금은 다르게 풀어보았다.

  • DFS의 인자를 줄이는 대신에 DFS 재귀호출 이후 갯수를 줄였던 연산자의 갯수를 다시 늘린다.
  • maxi, mini의 값은 python 내장함수인 max, min을 사용하여 구하였다.

나누기 부분에서 계속해서 오답처리가 되었고, result//arr[cur]int(result/arr[cur])로 변경하자 해결되었다. 문제의 나눗셈이 C++14 기준을 따라서 그런 것 같다.

n=int(input())
arr=list(map(int, input().split()))
op=list(map(int, input().split()))
maxi=-1000000000
mini=1000000000
def DFS(cur, result):
    global maxi
    global mini
    if cur==n:
        maxi=max(maxi, result)
        mini=min(mini, result)
        return
    if op[0]>0:
        op[0]-=1
        DFS(cur+1, result+arr[cur])
        op[0]+=1
    if op[1]>0:
        op[1]-=1
        DFS(cur+1, result-arr[cur])
        op[1]+=1
    if op[2]>0:
        op[2]-=1
        DFS(cur+1, result*arr[cur])
        op[2]+=1
    if op[3]>0:
        op[3]-=1
        if result==0:
            DFS(cur+1, 0)
            op[3]+=1
        else:
            DFS(cur+1, int(result/arr[cur]))
            op[3]+=1
DFS(1, arr[0])
print(maxi)
print(mini)

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

0개의 댓글