728x90
반응형
문제 출처:
https://www.acmicpc.net/problem/14888
14888번: 연산자 끼워넣기
첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수,
www.acmicpc.net
문제 풀이 :
- 앞서 본 스타크와 링크 문제와 흡사하다. 연산자가 나올 수 있는 모든 경우의 수를 우선 구한 뒤 구한 경우의 수에 대해서 모두 실행해서 최소 최대를 구한다.
- 보통 좀 더 어려워지면 모든 경우의 수를 구하는 것이 안되거나, 모든 경우의 수는 구할 수 있더라도 모두 실행할 순 없다거나 와 같은 경우가 대부분인 이 문제에선 모두 구하고 실행시켜도 통과가 된다.
import sys
import itertools
def calculator(command,num1,num2):
if(command=='+'):
return num1+num2
elif(command=='-'):
return num1-num2
elif(command=='*'):
return num1*num2
elif(command=='/'):
if(num1<0):
num1 = -1*num1
return -(num1//num2)
else:
return num1//num2
n = int(sys.stdin.readline())
sequence = list(map(int,sys.stdin.readline().split()))
operator_num = list(map(int,sys.stdin.readline().split()))
operator_str =['+','-','*','/']
operator=[]
max_val = -9999999999
min_val =9999999999
#print(sequence)
for i in range(4):
for j in range(operator_num[i]):
operator.append(operator_str[i])
#print(operator)
operator_case = list(set(itertools.permutations(operator)))
#print(operator_case)
#print(len(operator_case))
temp = sequence[0]
for i in range(len(operator_case)):
for j in range(n-1):
temp = calculator(operator_case[i][j],temp,sequence[j+1])
if(temp>max_val):
max_val = temp
if(temp<min_val):
min_val = temp
temp=sequence[0]
print(max_val)
print(min_val)
반응형
'Computer Science > Algorithm' 카테고리의 다른 글
[백준] 14502 - 연구소 (Python) (0) | 2021.07.19 |
---|---|
[프로그래머스] 순위 검색 (Level2) (Python) (0) | 2021.07.11 |
[백준] 14889 - 스타트와 링크 (Python) (0) | 2021.07.11 |
[프로그래머스] 메뉴 리뉴얼 (Level2) (Python) (1) | 2021.07.03 |
[프로그래머스] 신규 아이디 추천 (Level 1) (Python) (0) | 2021.07.03 |