본문 바로가기
백준/실버 1

14888번 - 연산자 끼워넣기(Python)

by 김주현3902 2025. 2. 4.

풀이

백트래킹 방식을 통해 입력받은 연산자의 순열 경우의 수를 모두 구한다.

구해진 각각의 연산자 배열을 이용해 연산을 수행하고, 이를 저장한다.

저장된 수들 중 max와 min 함수를 이용해 최댓값과 최솟값을 구한다.

코드

N = int(input())
A = list(map(int, input().split()))
numOfOperators = list(map(int, input().split()))
stack = []
nums = []
ops = []
visited = [False for _ in range(N-1)]
for i in range(4):
    for j in range(numOfOperators[i]):
        nums.append(i)


def dfs():
    if len(stack) == N-1:
        tmp = A[0]
        for i in range(N-1):
            tmp = calculator(tmp, A[i+1], stack[i])
        ans.append(tmp)
        return

    for i in range(N-1):
        if not visited[i]:
            visited[i] = True
            stack.append(nums[i])
            dfs()
            visited[i] = False
            stack.pop()


def calculator(num1, num2, op):
    if op == 0:
        return num1 + num2
    elif op == 1:
        return num1 - num2
    elif op == 2:
        return num1 * num2
    else:
        if num1 < 0:
            return -(-num1 // num2)
        else:
            return num1 // num2


ans = []
dfs()

print(max(ans))
print(min(ans))

 

'백준 > 실버 1' 카테고리의 다른 글

14889번 - 스타트와 링크(Python)  (0) 2025.02.07
1991번 - 트리 순회(Python)  (0) 2025.02.05
10844번 - 쉬운 계단 수(Python)  (0) 2025.01.25
2156번 - 포도주 시식(Python)  (0) 2025.01.25
1932번 - 정수 삼각형(Python)  (0) 2025.01.24