문제
작성 코드
n = int(input())
ls = list(map(int,input().split()))
sssd = list(map(int,input().split()))
sd = sum(sssd)
visited = [False]*sd
arr = [1]*sssd[0]+[2]*sssd[1]+[3]*sssd[2]+[4]*sssd[3]
maxc=-1000000000; minc=1000000000
def permutations(arr):
answer = []
used = [False]*(n-1)
def back(new,used):
if len(new)==len(arr):
answer.append(new[:])
return
for i in range(len(arr)):
if used[i]:
continue
if i>0 and arr[i]==arr[i-1] and not used[i-1]:
continue
used[i]=True
new.append(arr[i])
back(new,used)
new.pop()
used[i]=False
back([],used)
return answer
def calcul(button,a,b):
if button == 1:
answer = a+b
elif button == 2:
answer = a-b
elif button == 3:
answer = a*b
elif button == 4:
if a<0:
answer = ((-a)//b)*-1
else:
answer = a//b
return answer
pers = permutations(arr)
for l in pers:
val = ls[0]
for i in range(1,n):
val = calcul(l[i-1],val,ls[i])
maxc = max(maxc,val)
minc = min(minc,val)
print(maxc)
print(minc)
풀이
permutations은 재귀를 활용해 다시 구현하고,
calcul 함수에선 '나누기'일 경우만 if문으로 val이 음수일 경우를 따로 정의해주면 된다.
가장 헷갈리는 부분은 operations가 n-1개라는 점?
operations는 순열로 나타내어 경우의 수를 모두 나타내고 for문으로 순열씩 적용하면서 값을 계산하면 된다.