Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

똥그래미 코딩공장

백준 14888번(연산자 끼워넣기) 파이썬 본문

Algorithm

백준 14888번(연산자 끼워넣기) 파이썬

동그라미_ssu 2023. 2. 7. 17:17

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

 

14888번: 연산자 끼워넣기

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

www.acmicpc.net

이번 문제는 새로 배운게 많았다.

1. int(1e9)가 10억을 뜻한다는거

2. if, elif가 아닌 if 로만 만들면 전부 다 실행된다는거

 

문제가 생각했던 풀이와 달라 모범답안을 참고하는 수 밖에 없었다. 풀이를 보니 계속 고민을 했어도 못풀었을거 같긴하다 ㅋㅋ;;;

하지만 이렇게 또 새로운 풀이에 대해 배웠으니 뿌듯하긴 하다.

import sys
input = sys.stdin.readline

n = int(input())
a = list(map(int,input().split()))
sum,sub,mul,div = map(int,input().split())
max_value = -int(1e9) # -10억 -> 비교해줘야하는 수 이기 때문에 10억이 아닌 -10억으로 선언해준다
min_value = int(1e9) # 10억 -> 비교해줘야하는 수 이기 때문에 -10억이 아닌 10억으로 선언해준다


def dfs(sum,sub,mul,div,i,idx):
    global max_value, min_value
    if n == idx: # 모든 수가 다 사용됐을경우
        max_value = max(max_value,i) # 최댓값을 구한다
        min_value = min(min_value,i) # 최솟값을 구한다.
        return
    if sum > 0:
        dfs(sum-1,sub,mul,div,i+a[idx],idx+1)
        
    if sub > 0:
        dfs(sum,sub-1,mul,div,i-a[idx],idx+1)
        
    if mul > 0:
        dfs(sum,sub,mul-1,div,i*a[idx],idx+1)
        
    if div > 0:
        dfs(sum,sub,mul,div-1,int(i/a[idx]),idx+1)
        
dfs(sum,sub,mul,div,a[0],1)

print(max_value)
print(min_value)

백트래킹 좀 어려운 유형의 알고리즘인거 같다. 좀 더 집중적으로 풀어봐야 할 거 같다.

'Algorithm' 카테고리의 다른 글

백준 1149번(RGB거리) 파이썬  (0) 2023.02.10
백준 2156번(포도주 시식) 파이썬  (0) 2023.02.08
백준 2512번(예산) 파이썬  (0) 2023.02.06
백준 2636번(치즈) 파이썬  (1) 2023.02.05
백준 15650번(N과M(2)) 파이썬  (0) 2023.02.03