2020 KAKAO INTERNSHIP 수식 최대화 파이썬

1 분 소요

2020 KAKAO INTERNSHIP 수식 최대화 파이썬 풀이

바로 이전에 풀었던 거리두기 확인하기와 동일한 2레벨 문제입니다.

이번 문제 풀이는 가장 많은 좋아요를 받은 모범답안을 분석하겠습니다.

접근 방식

  1. ”+”, “-“, “*” 세개의 연산자로 만들 수 있는 경우의 수는 3!로 6가지 경우입니다.
  2. 3개 중 2개의 연산자만 활용하여 괄호를 적절하게 넣어준다면 eval함수를 통해서 자연스럽게 3개의 연산자 모두
    결과값을 도출할 수 있습니다.
  3. ”+” -> “-“ -> “*” 순서의 경우, 이를 역순으로 이용해서 먼저 +로 split시킨 것을 다시 -로 split 시켜줍니다.
  4. 이 과정에서 f”()와 join 함수를 활용해서 분리되었을 때 양쪽에 괄호가 붙고 이들 사이에 split에 활용했던
  5. 연산자를 넣어줍니다.
  6. 그럼 결과적으로 “+” -> “-“ -> “*” -> “-“ -> “+” 순으로 2개의 연산자만을 이용해서 괄호가 적절하게 분배된
  7. 연산식을 도출할 수 있습니다.
  8. 최종적으로 절대값을 취해주고 이를 리스트에 저장하여 가장 큰 값을 return 시키면 됩니다.
    def solution(expression):
     operations = [('+', '-', '*'),('+', '*', '-'),('-', '+', '*'),('-', '*', '+'),('*', '+', '-'),('*', '-', '+')]
     answer = []
     for op in operations:
         a = op[0]
         b = op[1]
         temp_list = []
         for e in expression.split(a):
             temp = [f"({i})" for i in e.split(b)]
             temp_list.append(f'({b.join(temp)})')
         answer.append(abs(eval(a.join(temp_list))))
     return max(answer)
    

이번 문제를 풀면서 split 함수를 이용해서 적절하게 연산자를 분리해야 한다는 것과

연산자의 조합에 맞게 분리할 경우, 이는 그 조합을 거꾸로 수행한다는 사실을 인지했습니다.

문제는, 연산자들의 6개 조합을 어떻게 적절하게 for문으로 수행할 것인가, 그리고 split할 때마다

어떻게 양 옆에 괄호를 넣어줄 것인가에 대한 고민이었습니다.

결국, split함수를 수행해주면서 list comprehension과 join함수를 사용해주는 것이 해답이었습니다.

알고리즘도 모든 것과 마찬가지로 꾸준한 연습과 이해를 바탕으로 실력이 향상합니다.
Just do it & Keep steady

댓글남기기