BOJ 14888) 연산자 끼워넣기

oasis·2023년 8월 17일

알고리즘

목록 보기
1/1

문제링크


정답

import sys
sys.setrecursionlimit(10**6)

def dfs(cnt, current_num, add, minus, mul, div):
  if cnt == n:
    global min_num, max_num
    min_num = min(min_num, current_num)
    max_num = max(max_num, current_num)
    return
    
  if add > 0:
    dfs(cnt+1, current_num+numbers[cnt], add-1, minus, mul, div)
  if minus > 0:
    dfs(cnt+1, current_num-numbers[cnt], add, minus-1, mul, div)
  if mul > 0:
    dfs(cnt+1, current_num*numbers[cnt], add, minus, mul-1, div)
  if div > 0:
    dfs(cnt+1, int(current_num/numbers[cnt]), add, minus, mul, div-1)

n = int(input())
numbers = list(map(int, input().split()))
add, minus, mul, div = map(int, input().split())

max_num = -1e9
min_num = 1e9

dfs(1, numbers[0], add, minus, mul, div)

print(int(max_num))
print(int(min_num))



주요 포인트

  1. 파이썬에서의 나눗셈
    [Python] 음수 나누기에 대하여 - 개념, 방법
    양수끼리 연산시 a//bint(a/b)는 같은 결과를 내지만, 음수양수 연산시 다른 결과를 낸다. 연산결과가 음수라면 두 연산의 결괏값이 다르다.
  • a//b는 연산 후 소수점을 내림처리한다.
    • 나눗셈 결과가 3.8이면 결과는 3이 된다.
    • 나눗셈 결과가 -3.8이면 결과는 -4가 된다.
    • 숫자를 수평선으로 생각했을 때 무조건 왼쪽의 값으로 결과를 낸다고 생각하면 된다.
  • int(a/b)는 연산 후 소수점을 버린다.
    • 나눗셈 결과가 3.8이면 결과는3이 된다.
    • 나눗셈 결과가 -3.8이면 결과는 -3이 된다.
  1. global 키워드
    • 전역 변수를 지역 범위에서 사용하기 위해 필요한 키워드
    • 전역 변수를 수정하고자 할때 사용함
  2. 최댓값, 최소값 초기화
    • 1e9 = 10**9
    • -1e9 = -10**9

0개의 댓글