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)
'백준 파이썬 코딩' 카테고리의 다른 글
백준 28357 사탕 나눠주기 파이썬 (0) | 2023.08.05 |
---|---|
백준 16567 바이너리 왕국 파이썬 반례 O (0) | 2023.07.28 |
백준 28215 대피소 파이썬 (0) | 2023.07.22 |
백준 25917 Prime Arrangement 파이썬 증명 X (0) | 2022.11.09 |
백준 25919 Lost Edge 파이썬 최적화버전 (0) | 2022.11.07 |