오뚝이개발자

[백준14888] 연산자 끼워넣기 본문

코딩 테스트/백준

[백준14888] 연산자 끼워넣기

땅어 2020. 3. 9. 16:32
728x90
300x250

문제


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

 

14888번: 연산자 끼워넣기

첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱셈(×)의 개수, 나눗셈(÷)의 개수이다. 

www.acmicpc.net

 

생각의 흐름


  1. +,-,*,//에 각각 1,2,3,4를 넘버링하여 각 연산자의 갯수만큼 리스트에 채운다.
  2. 이들의 순열을 이용하여 가능한 모든 연산의 경우의 수를 구한다.
  3. 비교하며 최솟값, 최댓값을 찾는다.

 

코드


from itertools import permutations

N = int(input())
A = list(map(int, input().split()))
plus, minus, multiple, division = map(int, input().split())

operation_list = []
operation_list += [1]*plus
operation_list += [2]*minus
operation_list += [3]*multiple
operation_list += [4]*division

operation_set = []
for numbers in list(permutations(operation_list, )):
    operation_set.append(numbers)
operation_set = list(set(operation_set))

max_answer = -1000000001
min_answer = 1000000001
for case in operation_set:
    answer = A[0]

    for i in range(N-1):
        if case[i] == 1:
            answer += A[i+1]
        elif case[i] == 2:
            answer -= A[i+1]
        elif case[i] == 3:
            answer *= A[i+1]
        else:
            if answer<0:
                answer = -(-answer//A[i+1])
            else:
                answer //= A[i+1]
    
    if answer<min_answer:
        min_answer = answer
    if answer>max_answer:
        max_answer = answer

print(max_answer)
print(min_answer)

출처 : https://claude-u.tistory.com/371

728x90
300x250

'코딩 테스트 > 백준' 카테고리의 다른 글

[백준1182] 부분수열의 합  (0) 2020.03.10
[백준1759] 암호 만들기  (0) 2020.03.09
[백준6603] 로또  (0) 2020.03.09
[백준10971] 외판원 순회 2  (0) 2020.03.09
[백준10819] 차이를 최대로  (0) 2020.03.09
Comments