ebson

boj.kr/14888 연산자 끼워넣기 (silver1) 파이썬 풀이 본문

ALGORITHM STUDY WITH PYTHON/Bruteforce

boj.kr/14888 연산자 끼워넣기 (silver1) 파이썬 풀이

ebson 2023. 4. 20. 12:34

1. nums에 순서대로 숫자들을 저장

2. +, -, *, / 연산자를 개수만큼 qs 배열에 저장

3. 문제 조건에 맞게 divide 함수를 정의

4. permutations를 사용해 가능한 모든 연산자들의 순열에 대해 아래를 반복

4.1. ans에 nums[0]을 저장

4.2. 연산자들의 순열을 순회하면서 +, -, *, divide 연산을 수행한 결과를 ans으로 갱신

4.3. ans와 min_ans, max_ans를 각각 최소, 최대 비교해 min_ans, max_ans를 갱신

5. max_ans를 출력하고 다음줄에 min_ans를 출력

 

N = int(input())
nums = list(map(int, input().split()))
ops = list(map(int, input().split()))
qs = '+' * ops[0] + '-' * ops[1] + '*' * ops[2] + '/' * ops[3]

def divide(a, b):
    if a < 0 and b > 0:
        return -1 * (abs(a) // b)
    return a // b
from itertools import permutations
max_ans = -int(1e9)
min_ans = int(1e9)
for permu in permutations(qs, N - 1):
    ans = nums[0]
    for i in range(N - 1):
        if permu[i] == '+':
            ans += nums[i + 1]
        elif permu[i] == '-':
            ans -= nums[i + 1]
        elif permu[i] == '*':
            ans *= nums[i + 1]
        elif permu[i] == '/':
            ans = divide(ans, nums[i + 1])
    max_ans = max(max_ans, ans)
    min_ans = min(min_ans, ans)

print(max_ans)
print(min_ans)

 

max(n1, n2), min(n1, n2) 함수의 인자로는 int 형만 사용할 수 있다. 그래서 max = -1e9 min = 1e9와 같이 초기화하면 오답이 되고 max = -int(1e9) min = int(1e9)와 같이 초기화 해두어야 정답으로 체점된다.

Comments