2020 카카오 인턴십 기출문제이다. Level2 인데 생각보다 까다로웠다.
- 사용 알고리즘 : 순열, 구현
- 처음 참고한 코드는 아래 링크로 남겨둔다.
- 저 분의 코드 흐름은 같으나, 난 permutation 라이브러리로 순열을 구현해 반복문으로 가장 순위가 높은 순으로 계산했다.
- 계산 시에는 eval 함수로 나온 정수를 다시 문자열로 바꾸며 계속 계산을 진행했다.
파이썬 코드는 다음과 같다.
from itertools import permutations
def calc(expression, priority):
for i in range(len(expression)):
expression[i] = expression[i].split(priority[1])
new_expression = []
for i in range(len(expression)):
temp = []
for e in range(len(expression[i])):
if priority[0] in expression[i][e]: # 우선순위 가장 높은 기준
temp.append(str(eval(expression[i][e])))
continue
temp.append(expression[i][e])
new_expression.append(temp)
expression = []
for i in range(len(new_expression)):
if len(new_expression[i]) > 1:
expression.append(str(eval(priority[1].join(new_expression[i]))))
continue
expression.append(new_expression[i][0]) # 우선순이 두번째로 높은 기준
return abs(eval(priority[-1].join(expression))) # 절댓값을 리턴
def solution(expression):
answer = 0
for priority in permutations("+-*", 3):
new_expression = expression.split(priority[-1]) # 가장 우선순위 낮은 연산자 기준
answer = max(answer, calc(new_expression, priority))
return answer
print(solution("100-200*300-500+20"))
print(solution("50*6-3*2"))
- 고찰 : 수식을 일일이 구현하기 힘들어서 그냥 냅다 eval 함수를 사용해서 계산했다. 시간 초과가 나지 않아 신기했다.
'Problem Solving > programmers' 카테고리의 다른 글
[Programmers] 정수 삼각형(Python) / Dynamic Programming (0) | 2021.05.03 |
---|---|
[Programmers] 등굣길(Python) / Dynamic Programming (0) | 2021.05.03 |
[Programmers] 큰 수 만들기(Python) / Greedy (0) | 2021.02.26 |
[Programmers] SQL 고득점 Kit - JOIN (0) | 2021.02.26 |
[Programmers] SQL 고득점 Kit - String, Data (0) | 2021.02.26 |