[백준][python]14888 연산자 끼워넣기

yylog·2023년 2월 6일
0
post-custom-banner

문제

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

소스코드

방법 1

if __name__ == "__main__":
    n = int(input())
    number = list(map(int,input().split()))
    opt = list(map(int,input().split()))
    maxnum = -1e9
    minnum = 1e9

    def dfs(l,sum):
        global opt
        global maxnum
        global minnum
        if l == n :
            maxnum = max(sum,maxnum)
            minnum = min(sum,minnum)
            return
        
        if opt[0] > 0 :
            tmp = sum
            tmp += number[l]
            opt[0]-=1
            dfs(l+1,tmp)
            opt[0] +=1
        if opt[1] > 0 :
            tmp = sum
            tmp -= number[l]
            opt[1]-=1
            dfs(l+1,tmp)
            opt[1] +=1
        if opt[2] > 0 :
            tmp = sum
            tmp *= number[l]
            opt[2]-=1
            dfs(l+1,tmp) 
            opt[2] +=1
        if opt[3] > 0 :
            tmp = sum
            tmp = int(tmp/number[l])
            opt[3] -=1
            dfs(l+1,tmp)
            opt[3] +=1
    
    dfs(1,number[0])    
    print(maxnum)                 
    print(minnum) 

방법2 ( 방법1를 더 간단하고 보기 좋게 개선)

if __name__ == "__main__":
    n = int(input())
    number = list(map(int,input().split()))
    opt = list(map(int,input().split()))
    max_num = -1e9
    min_num = 1e9

    def dfs(l,res,plus,min,mul,div):
        global max_num
        global min_num
        
        if l == n:
            max_num = max(res, max_num)
            min_num = min(res, min_num)
            return

        if plus:
            dfs(l+1,res+number[l],plus-1,min,mul,div)
        if min:
            dfs(l+1,res-number[l],plus,min-1,mul,div)
        if mul:
            dfs(l+1,res*number[l],plus,min,mul-1,div)
        if div:
            dfs(l+1,int(res/number[l]),plus,min,mul,div-1)
    dfs(1,number[0],opt[0],opt[1],opt[2],opt[3])
    print(max_num)
    print(min_num)

설명

완전탐색, bruteForce를 DFS로 구현하였다.

후기

max_num, min_num을 100000 ,-1000000으로 습관적으로 세팅했는데 오류가 났다. 이럴 땐 문제를 보면 답이 있다.

입력조건에 아래와 같이 나와있다 -> 1e9 무한으로 설정해주자

연산자를 어떻게 끼워넣어도 항상 -10억보다 크거나 같고, 10억보다 작거나 같은 결과가 나오는 입력만 주어진다.

profile
경험하고 공부한 모든 것을 기록하는 공간
post-custom-banner

0개의 댓글