코딩테스트
[파이썬(python)] 이것이 취업을 위한 코딩 테스트다 연산자 끼워 넣기 백준 14888
고후
2022. 2. 16. 11:28
https://www.acmicpc.net/problem/14888
내 코드..
실패 ㅜ
import math
from itertools import product
n = int(input())
a = list(map(int, input().split()))
plus, minus, multiple, divide = map(int, input().split())
result = []
pro = list(product(['+','-','*','/'], repeat = n-1))
for case in pro:
result_now = a[0]
for r in range(1, n):
if case[r-1] == '+':
result_now += a[r]
elif case[r-1] == '-':
result_now -= a[r]
elif case[r-1] == '*':
result_now *= a[r]
elif case[r-1] == '/':
result_now = int(result_now / a[r])
result.append(result_now)
print(max(result))
print(min(result))
수정한 코드
약간 고민을 했던게 '+', '-', '*', '/' 전부 입력받은 만큼 product 해야하는데.. product하면 그냥 가능한 모든 조합으로 리스트에 저장된다..
그래서 저장된 리스트에서 다시 '+', '-', '*', '/'의 개수를 카운트했을 때 add, sub, mul, div만큼의 개수가 있는 case만
다른 리스트에 새로 저장했다.
효율성이 떨어지나 고민했지만 백준에서 테스트했을 때 잘 통과된다.
import math
from itertools import product
n = int(input())
a = list(map(int, input().split()))
add, sub, mul, div = map(int, input().split())
result = []
pro = list(product(['+', '-', '*', '/'], repeat = n-1))
available_pro = []
for case in pro:
if case.count('+') == add:
if case.count('-') == sub:
if case.count('*') == mul:
if case.count('/') == div:
available_pro.append(case)
available_pro = list(set(available_pro))
for case in available_pro:
result_now = a[0]
for i in range(n-1):
if case[i] == '+':
result_now += a[i+1]
elif case[i] == '-':
result_now -= a[i+1]
elif case[i] == '*':
result_now *= a[i+1]
elif case[i] == '/':
result_now = int(result_now / a[i+1])
result.append(result_now)
print(max(result))
print(min(result))