백준 14888 연산자끼워넣기 파이썬
접근방식
- 각각의 연산 이름으로 연산 횟수를 입력받습니다.
- 최대값과 최솟값을 갱신하기 위해 변수를 지정해줍니다.
- 배열의 길이만큼 연산이 이루어졌다면 최댓값과 최솟값을 갱신합니다.
- 각각의 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
댓글남기기