[BOJ/Python] 백준 14888 연산자 끼워넣기
문제
https://www.acmicpc.net/problem/14888
풀이
풀이
- 31256 KB, 88 ms
import sys
input = sys.stdin.readline
n = int(input())
nums = list(map(int, input().split()))
ops = list(map(int, input().split())) # 연산자 개수 : +, -, *, /
chosen = [0, 0, 0, 0] # 고른 연산자 개수 저장
ans_min = 1e9
ans_max = -1e9
def cal(a, op, b) :
match op :
case 0 : return a + b
case 1 : return a - b
case 2 : return a * b
case 3 :
if a < 0 and b > 0 : # 음수//양수 : 문제 설명
return (a * (-1) // b) * (-1)
else :
return a // b
def backtracking(res, depth) :
global ans_max, ans_min
# base
if depth == n - 1 :
ans_max = max(ans_max, res)
ans_min = min(ans_min, res)
# recursive
else :
for i in range(4) : # 연산자 고르기(+, -, *, //)
if chosen[i] + 1 > ops[i] : # 연산자 골랐을 때 개수 제한 넘어가면 컨티뉴
continue
else : # 고를 수 있는 경우
chosen[i] += 1 # 골랐다 체크
backtracking(cal(res, i, nums[depth + 1]), depth + 1)
chosen[i] -= 1 # 복구
backtracking(nums[0], 0)
print(ans_max)
print(ans_min)
틀린 이유
- 연산 결과의 범위가 -10억 ~ 10억인데, ans_max를 0으로 초기화함 -> min, max 초기화할 때 연산 결과의 범위 확인
배운점
- python에서 최소, 최대값을 1e9, -1e9으로 초기화 (+- 10억 넘어가는 경우에는 당연히 주의!)
- 1e9 : 1∗109 = 1,000,000,000 (10억)
- 1e9 : −1∗109 = -1,000,000,000 (-10억)
Leave a comment