728x90
반응형
https://www.acmicpc.net/problem/14888
더보기
내 코드
import sys
def Insert_Operator(now, level):
if level == N:
global min_n, max_n
max_n = max(now, max_n)
min_n = min(now, min_n)
return
# 더하기
if oper[0] > 0:
oper[0] -= 1
Insert_Operator(now + num[level], level+1)
oper[0] += 1
# 빼기
if oper[1] > 0:
oper[1] -= 1
Insert_Operator(now - num[level], level+1)
oper[1] += 1
# 곱하기
if oper[2] > 0:
oper[2] -= 1
Insert_Operator(now * num[level], level+1)
oper[2] += 1
# 나누기
if oper[3] > 0:
tmp = abs(now) // num[level]
# 음수일 경우 확인
if now < 0:
tmp *= -1
oper[3] -= 1
Insert_Operator(tmp, level+1)
oper[3] += 1
if __name__=='__main__':
# 수의 개수
N = int(sys.stdin.readline())
# 숫자들
num = list(map(int, sys.stdin.readline().split()))
# 덧셈 수, 뺄셈 수, 곱셈 수, 나눗셈 수
oper = list(map(int, sys.stdin.readline().split()))
# 출력 관련 범위
min_n = 10 ** 9
max_n = -10 ** 9
now = num[0]
Insert_Operator(now, 1)
print(max_n)
print(min_n)
|
출력에서 최댓값과 최솟값이 항상 -10억보다 크거나 같고, 10억보다 작거나 같은 결과가 나오는 입력만 주어지고, 앞에서부터 계산했을 때, 중간에 계산되는 식의 결과도 항상 -10억보다 크거나 같고, 10억보다 작거나 같다는 항목을 지켜주어야 한다.
백 트레킹 문제인데 결국은 DFS이다.
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[python/2748]피보나치 수2 (0) | 2020.04.02 |
---|---|
[python/14889]스타트와 링크 (0) | 2020.03.31 |
[python/10996]별 찍기 - 21 (0) | 2020.03.23 |
[python/2446]별 찍기 - 9 (0) | 2020.03.21 |
[python/2523]별 찍기 - 13 (0) | 2020.03.20 |