취준생의 코딩테스트 연습기

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

코딩테스트/백준

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

Jiwon_C 2021. 5. 13. 23:37

# 문제 링크

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

 

14888번: 연산자 끼워넣기

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

www.acmicpc.net

# Soultion

예제3번의 나눗셈부분을 신경써서 처리하면 간단한 문제이다.

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
32
from itertools import permutations
= int(input())
= ['+','-','*','/']
num = list(map(int,input().split()))
op = list(map(int,input().split())) # + - * /
oper = []
oper = []
for i in range(4):
    for j in range(op[i]):
        oper.append(o[i])
 
oper = list(set(permutations(oper,len(oper)))) #중복제거
 
answer = []
for i in oper:
    n = num[0]
    for j in range(len(num)-1):
        if i[j]=='+':
            n += num[j+1]
        elif i[j]=='-':
            n -= num[j+1]
        elif i[j]=='*':
            n *= num[j+1]
        else:
            if n//num[j+1<0:
                n = -(-n//num[j+1])
            else:
                n = n//num[j+1]
 
    answer.append(n)
print(max(answer))
print(min(answer))
cs

8. 입력받은 연산자의 숫자를 이용하여 해당하는 연산자의 개수만큼 리스트에 저장

12. 순열을 이용하여 모든 경우의 수를 만들고, set을 이용하여 중복을 제거해준다.

15. 연산자 경우의 수 모두 비교

24. 나눗셈의 경우에는 음수일 경우, 양수로 변경해준뒤 다시 음수로 만들어주는 과정을 진행한다.

     왜냐하면 -1/3인 경우는 반올림을 하게되면 -1로 나오므로 제대로 계산해주기 위함.

31. 최대값과 최솟값 출력 

Comments