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