본문 바로가기
Coding Test/BOJ

[백준] 14888 - 연산자 끼워넣기 [Python(파이썬)]

'삼성 SW 역량 테스트' 기출 문제 입니다. 😀

문제 👉 14888번: 연산자 끼워넣기

1. 문제

  1. N개의 수로 이루어진 배열과 수와 수 사이에 끼어넣을 수 있는 N-1개의 연산자가 주어진다.
  2. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다.
  3. 연산자는 수와 수 사이에 하나만 들어간다.
  4. 주어진 N개의 수와 N-1개의 연산자를 통해 구할 수 있는 최대값과 최솟값을 출력한다.

2. 풀이

브루트포스를 이용한 문제 풀이

  1. 연산자의 개수를 배열로 저장
  2. 브루트포스를 통해 주어진 수의 개수를 모두 사용하였을 때 최소 최대 값 저장

3. 코드

N = int(input())
A = list(map(int, input().split()))
op = list(map(int, input().split()))
mx, mn = -1e9, 1e9 # 십억

def solution():

    def bf(idx, val, add, sub, mul, div):
        global mx, mn
        if idx == N:
            mx = max(mx, val)
            mn = min(mn, val)
            return
        if add:
            bf(idx+1, val+A[idx], add-1, sub, mul, div)
        if sub:
            bf(idx+1, val-A[idx], add, sub-1, mul, div)
        if mul:
            bf(idx+1, val*A[idx], add, sub, mul-1, div)
        if div:
            bf(idx+1, val//A[idx] if val >= 0 else -((-val)//A[idx]), add, sub, mul, div-1)

    bf(1, A[0], op[0], op[1], op[2], op[3])
    print(mx)
    print(mn)

solution()
  • 결과는 92 ms 나왔다.

References

  •  

🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋

댓글