2/프로그래머스
프로그래머스 연습 문제 - 수식 최대화
하례은
2020. 9. 29. 19:44
programmers.co.kr/learn/courses/30/lessons/67257
코딩테스트 연습 - 수식 최대화
IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과 �
programmers.co.kr
2020 카카오 인턴쉽
import collections
def operator(pe,op,oper):
sm = []
operNum = collections.Counter(pe)
if len(oper) == 3:
expression = pe
pe = []
index = 0
for i in range(len(expression)):
if expression[i].isdigit() == False :
pe.append(expression[index:i])
pe.append(expression[i])
index = i+1
if i == len(expression)-1 :
pe.append(expression[index:])
if op == '+':
count = operNum['+']
oper.remove('+')
for i in range(count):
x = pe.index('+')
num1 = pe[x-1]
num2 = pe[x]
num3 = pe[x+1]
del pe[x-1:x+2]
pe.insert(x-1,str(eval(num1+num2+num3)))
if len(pe) == 1:
return pe[0]
if oper[0] == '-':
sm = operator(pe,'-',oper)
elif oper[0] == '*':
sm = operator(pe,'*',oper)
elif op == '-':
count = operNum['-']
oper.remove('-')
for i in range(count) :
x = pe.index('-')
num1 = pe[x-1]
num2 = pe[x]
num3 = pe[x+1]
del pe[x-1:x+2]
pe.insert(x-1,str(eval(num1+num2+num3)))
if len(pe) == 1:
return pe[0]
if oper[0] == '+':
sm = operator(pe,'+',oper)
elif oper[0] == '*':
sm = operator(pe,'*',oper)
elif op == '*':
count = operNum['*']
oper.remove('*')
for i in range(count):
x = pe.index('*')
num1 = pe[x-1]
num2 = pe[x]
num3 = pe[x+1]
del pe[x-1:x+2]
pe.insert(x-1,str(eval(num1+num2+num3)))
if len(pe) == 1:
return pe[0]
if oper[0] == '-':
sm = operator(pe,'-',oper)
elif oper[0] == '+':
sm = operator(pe,'+',oper)
return abs(int(sm))
def solution(expression):
answer = []
answer.append(operator(expression,'+',['+','-','*']))
answer.append(operator(expression,'+',['+','*','-']))
answer.append(operator(expression,'-',['-','+','*']))
answer.append(operator(expression,'-',['-','*','+']))
answer.append(operator(expression,'*',['*','-','+']))
answer.append(operator(expression,'*',['*','+','-']))
answer = max(answer)
return answer
채점 결과
정확성: 90.0
합계: 90.0 / 100.0
하드코딩..이란 ..이런걸까
정확성에서 틀린건 런타임오류 때문인데 재귀함수를 써서 시간초과가 되는건지....잘 모르겠다...ㄱ-...열받...
pop()을 del로 바꿔줘도 계속 시간초과되고...후... 뭔가 방법을 찾아야겠다.