코딩 테스트/Baekjoon

S1 14888. 연산자 끼워넣기

  • -
728x90
반응형

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


문제

  • 정답률 : 46%


작성 코드

n = int(input())
ls = list(map(int,input().split()))
sssd = list(map(int,input().split()))
sd = sum(sssd)
visited = [False]*sd
arr = [1]*sssd[0]+[2]*sssd[1]+[3]*sssd[2]+[4]*sssd[3]

maxc=-1000000000; minc=1000000000

def permutations(arr):
    answer = []
    used = [False]*(n-1)
    def back(new,used):
        if len(new)==len(arr):
            answer.append(new[:])
            return 
        for i in range(len(arr)):
            if used[i]:
                continue
            if i>0 and arr[i]==arr[i-1] and not used[i-1]:
                continue
            used[i]=True
            new.append(arr[i])
            back(new,used)
            new.pop()
            used[i]=False
    back([],used)
    return answer

def calcul(button,a,b):
    if button == 1:
        answer = a+b
    elif button == 2:
        answer = a-b
    elif button == 3:
        answer = a*b
    elif button == 4:
        if a<0:
            answer = ((-a)//b)*-1
        else:
            answer = a//b
    return answer

pers = permutations(arr)

for l in pers:
    val = ls[0]
    for i in range(1,n):
        val = calcul(l[i-1],val,ls[i])

    maxc = max(maxc,val)
    minc = min(minc,val)

print(maxc)
print(minc)

풀이

permutations은 재귀를 활용해 다시 구현하고,
calcul 함수에선 '나누기'일 경우만 if문으로 val이 음수일 경우를 따로 정의해주면 된다.

가장 헷갈리는 부분은 operations가 n-1개라는?
operations는 순열로 나타내어 경우의 수를 모두 나타내고 for문으로 순열씩 적용하면서 값을 계산하면 된다.

320x100
728x90

'코딩 테스트 > Baekjoon' 카테고리의 다른 글

S3 2193. 이친수  (0) 2024.11.15
S2 4948. 베르트랑 공준  (0) 2024.11.14
S3 2108. 통계학  (0) 2024.11.11
S3 14501. 퇴사  (0) 2024.11.10
G4 14502. 연구소  (0) 2024.11.09
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.