본문 바로가기

백준 파이썬 코딩

백준 14888 연산자 끼워넣기 파이썬

https://www.acmicpc.net/problem/14888

백준 14888번: 연산자 끼워넣기 바로가기

재밌는 백트레킹 문제이다

2년만에 코딩하는건데 여전히 재밌는 것 같다.

여기서 포인트는 하나만 잘 만들면 밑에는 똑같이 만들면 된다.

마지막으로 주의할점은 나눗셈할때 음수인 경우이다 문제 설명에 맞게 코딩해주면 된다~

import sys#최대 최소
def back(i,k,t):#(index, 그 전 연산 값, 기호쓴것들 표시) 
    global maxs, mins #지역 함수 밖에 있는 걸 수정할거니까~
    if i == n:#맨 끝 index에 도착했으니 더이상 연산할게 없음
        mins = min(mins,k)
        maxs = max(maxs,k)

    for j in range(4):
        if j == 0 and t[0]>0:#만약 기호가 있다면
            t[0]-=1#이 기호를 썼다하고
            back(i+1,s[i] + k,t)#백트레킹 실행
            t[0]+=1#다시 돌려주기

        if j == 1 and t[1]>0:#위에 반복
            t[1]-=1
            back(i+1, k - s[i],t)
            t[1]+=1

        if j == 2 and t[2]>0:
            t[2]-=1
            back(i+1, k * s[i],t)
            t[2]+=1

        if j == 3 and t[3]>0:
            t[3]-=1
            if k<0:#만약에 음수인 경우 예외처리 해줘야함
                back(i+1,-(abs(k)//s[i]),t)
            else:
                back(i+1,k//s[i],t)
            t[3]+=1

n = int(input())
s = list(map(int,input().split()))
w = list(map(int,input().split()))# + - * / 리스트
maxs = -sys.maxsize
mins = sys.maxsize
back(1,s[0],w)#시작은 index 1부터 해줘야함 그래야 연산가능
print(maxs)
print(mins)