백준 14888 연산자끼워넣기 파이썬

최대 1 분 소요

백준 14888 연산자 끼워넣기 풀이

접근방식

  1. 각각의 연산 이름으로 연산 횟수를 입력받습니다.
  2. 최대값과 최솟값을 갱신하기 위해 변수를 지정해줍니다.
  3. 배열의 길이만큼 연산이 이루어졌다면 최댓값과 최솟값을 갱신합니다.
  4. 각각의 if문은 남은 횟수가 0보다 클 경우 해당 숫자와 그 다음 숫자의 연산을 실행합니다.
import sys
input = lambda: sys.stdin.readline().rstrip()

n = int(input())

nums = list(map(int, input().split()))

 # + - x //
add, sub, mul, div = map(int, input().split())

max_val = -int(1e9)
min_val = int(1e9)

def cal(num, idx, add, sub, mul, div):
    global max_val, min_val
    if idx == n:
        max_val = max(max_val, num)
        min_val = min(min_val, num)
        return
    if add > 0:
        cal(num+nums[idx], idx+1, add-1, sub, mul, div)
    if sub > 0:
        cal(num-nums[idx], idx+1, add, sub-1, mul, div)
    if mul > 0:
        cal(num*nums[idx], idx+1, add, sub, mul-1, div)
    if div > 0:
        cal(int(num/nums[idx]), idx+1, add, sub, mul, div-1)

cal(nums[0], 1, add, sub, mul, div)
print(max_val)
print(min_val)

해당 문제는 실버 1레벨의 백트래킹 문제였습니다.

연산자를 활용한 문제는 처음에 int와 str의 조합이라는 생각에

접근하기 어려웠었습니다. 하지만 입력을 하나의 int 또는 리스트로 받고

이를 활용한다면 더 쉽게 풀이법을 찾을 수 있습니다.

알고리즘도 모든 것과 마찬가지로 꾸준한 연습과 이해를 바탕으로 실력이 향상합니다.
Just do it & Keep steady

댓글남기기