728x90
https://www.acmicpc.net/problem/14888
import itertools
n = int(input()) # 수의 개수 (5)
aa = list(map(int, input().split())) # n 개의 수 (1 2 3 4 5)
op_n = list(map(int, input().split())) # 연산자 각 종류 수 (0 1 2 1)
op = [] # +, -, *, // 수 만큼 삽입 [1, 2, 2, 3]
for i in range(4): # 연산자 해당하는 번호를 op 에 삽입
for j in range(op_n[i]): # op = [1, 2, 2, 3]
op.append(i)
min = 1000000000
max = -1000000000
case = list(set(list(itertools.permutations(op)))) # 연산자 순열 (중복 제거)
# [(2, 3, 2, 1), (2, 1, 3, 2), (2, 3, 1, 2), (1, 3, 2, 2), (3, 2, 2, 1),
# (2, 1, 2, 3), (2, 2, 1, 3), (3, 1, 2, 2), (3, 2, 1, 2), (2, 2, 3, 1), (1, 2, 3, 2), (1, 2, 2, 3)]
for i in range(len(case)):
a = [str(aa[0])] # a = ['1'] case[0] = (2, 3, 2, 1) = (*, //, *, -)
for j in range(n-1): # 연산자로 변경하여 a 에 삽입
if case[i][j] == 0:
a.append('+')
elif case[i][j] == 1:
a.append('-')
elif case[i][j] == 2:
a.append('*')
else:
a.append('//')
a.append(aa[j+1])
# a = ['1', '*', '2', '//', '3', '*', '4', '-', '5']
# 연산 작업 => (a[0] a[1] a[2])=(숫자 연산자 숫자) 계산 결과를 a[0]에 넣고 a[1], a[2] 삭제
# a = ['1', '*', '2', '//', '3', '*', '4', '-', '5'] => ['2', '//', '3', '*', '4', '-', '5']
# => ['0', '*', '4', '-', '5'] => ['0', '-', '5'] => ['-5']
while len(a) > 1:
if '*' == a[1]:
a[0] = str(int(a[0])*int(a[2]))
del a[1:3]
elif '//' == a[1]:
if int(a[0]) < 0:
a[0] = '-' + str(int(a[0])*(-1)//int(a[2]))
else:
a[0] = str(int(a[0])//int(a[2]))
del a[1:3]
elif '+' == a[1]:
a[0] = str(int(a[0])+int(a[2]))
del a[1:3]
elif '-' == a[1]:
a[0] = str(int(a[0])-int(a[2]))
del a[1:3]
if min > int(a[0]): # 최솟값인지
min = int(a[0])
if max < int(a[0]): # 최댓값인지
max = int(a[0])
print(max)
print(min)
import itertools
n = int(input()) # 수의 개수 (5)
aa = list(map(int, input().split())) # n 개의 수 (1 2 3 4 5)
op_n = list(map(int, input().split())) # 연산자 각 종류 수 (0 1 2 1)
op = [] # +, -, *, // 수 만큼 삽입 [1, 2, 2, 3]
for i in range(4): # 연산자 해당하는 번호를 op 에 삽입
for j in range(op_n[i]): # op = [1, 2, 2, 3]
op.append(i)
min = 1000000000
max = -1000000000
case = list(set(list(itertools.permutations(op)))) # 연산자 순열 (중복 제거)
# [(2, 3, 2, 1), (2, 1, 3, 2), (2, 3, 1, 2), (1, 3, 2, 2), (3, 2, 2, 1),
# (2, 1, 2, 3), (2, 2, 1, 3), (3, 1, 2, 2), (3, 2, 1, 2), (2, 2, 3, 1), (1, 2, 3, 2), (1, 2, 2, 3)]
for i in range(len(case)):
a = aa[0] # a = ['1'] case[0] = (2, 3, 2, 1) = (*, //, *, -)
for j in range(n-1): # 연산자로 변경하여 a 에 삽입
if case[i][j] == 0:
a = a + aa[j+1]
elif case[i][j] == 1:
a = a - aa[j+1]
elif case[i][j] == 2:
a = a * aa[j+1]
else:
if a < 0:
a = - (-a // aa[j+1])
else:
a = a // aa[j+1]
if min > a: # 최솟값인지
min = a
if max < a: # 최댓값인지
max = a
print(max)
print(min)
반응형
'전.py' 카테고리의 다른 글
백준 2015 수들의 합 4 (실패) (0) | 2020.12.13 |
---|---|
백준 1002 터렛 (0) | 2020.12.13 |
백준 1697 숨바꼭질 (0) | 2020.12.13 |
백준 14225 부분수열의 합 (0) | 2020.12.13 |
백준 3989 유행성 독감 (실패) (0) | 2020.12.13 |