흰 스타렉스에서 내가 내리지

[BOJ] (DFS) 15658번 연산자 끼워넣기 (2) 본문

Problem Solving

[BOJ] (DFS) 15658번 연산자 끼워넣기 (2)

주씨. 2022. 2. 27. 13:21
728x90

 

permutation을 이용해 brute force로 처음에 접근을 했는데, 시간초과가 났다.

dfs로 풀면 시간초과를 피할 수 있다.

n = int(input())
arr = list(map(int, input().split()))
oper = list(map(int, input().split()))
maxval, minval = -1e9, 1e9

def solve(index, val, add, sub, mul, div):
    global maxval, minval
    if index == n:
        maxval = max(maxval, val)
        minval = min(minval, val)
        return 
    
    if add:
        solve(index+1, val+arr[index], add-1, sub, mul, div)
    if sub:
        solve(index+1, val-arr[index], add, sub-1, mul, div)
    if mul:
        solve(index+1, val*arr[index], add, sub, mul-1, div)
    if div:
        solve(index+1, int(val/arr[index]), add, sub, mul, div-1)
        
solve(1, arr[0], *oper)
print(maxval)
print(minval)

 

 

https://www.acmicpc.net/problem/15658

 

15658번: 연산자 끼워넣기 (2)

첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1보다 크거나 같고, 4N보다 작거나 같은 4개의 정수가 주어지는데, 차례대

www.acmicpc.net

 

'Problem Solving' 카테고리의 다른 글

[BOJ] (DP) 2156번 포도주 시식  (0) 2022.03.06
[BOJ] (DP, BFS) 13549번 숨바꼭질3 ??  (0) 2022.03.02
[BOJ] (BFS)7576번 토마토  (0) 2022.02.25
[BOJ] (GRAPH) 1707번 이분 그래프  (0) 2022.02.19
[BOJ] (DP) 1149번 RGB거리  (0) 2022.02.17