본문 바로가기
알고리즘/python

14888번 연산자 끼워넣기(python3)

by 펀구구 2022. 2. 11.

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

 

14888번: 연산자 끼워넣기

첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 

www.acmicpc.net

bfs로 이 문제를 접근하였다. 지도(상하좌우 이동)문제에서는 bfs 적용을 제대로 마스터했다고 생각했는데 이와 같은 문제에서는 제대로 적용하지 못한다는 것을 알게 되었다.

각 bfs마다 따로 남은 연산자의 갯수 deepcopy를 통해서 할당해주면 된다. 그리고 count가 숫자의 갯수보다 하나 작을때까지 bfs를 적용해주면 된다.

from collections import deque
from copy import deepcopy

N = int(input())
number = list(map(int, input().split()))
yon = list(map(int, input().split()))



def bfs(good, yon1):
    queue = deque()
    queue.append([0, good, yon1])
    max = -999999999
    min = 999999999
    while queue:
        count, num, temp = queue.popleft()
        if count == N - 1:
            if num > max:
                max = num
            if num < min:
                min = num
        else:
            if temp[0] != 0:
                temp2 = deepcopy(temp)
                temp2[0] -= 1
                queue.append([count + 1, num + number[count + 1], temp2])
            if temp[1] != 0:
                temp2 = deepcopy(temp)
                temp2[1] -= 1
                queue.append([count + 1, num - number[count + 1], temp2])
            if temp[2] != 0:
                temp2 = deepcopy(temp)
                temp2[2] -= 1
                queue.append([count + 1, num * number[count + 1], temp2])
            if temp[3] != 0:
                if num < 0:
                    temp2 = deepcopy(temp)
                    temp2[3] -= 1
                    queue.append(([count + 1, -(abs(num) // number[count + 1]), temp2]))
                else:
                    temp2 = deepcopy(temp)
                    temp2[3] -= 1
                    queue.append(([count + 1, num // number[count + 1], temp2]))
    return max, min


ans_max, ans_min = bfs(number[0], yon)
print(ans_max)
print(ans_min)

'알고리즘 > python' 카테고리의 다른 글

17144번 미세먼지 안녕!(python3)  (0) 2022.02.18
11559번 Puyo Puyo(python3)  (0) 2022.02.18
2573번 빙산(python3)  (0) 2022.02.06
16236번 아기상어(python3)  (0) 2022.02.06
2468번 안전 영역(python3)  (0) 2022.02.05