문제 출처: tech.kakao.com/2020/07/01/2020-internship-test/
2020 카카오 인턴십 for Tech developers 문제해설
2020년 카카오의 여름 인턴십이 시작 되었습니다.여름 인턴십의 첫번째 관문인 코딩 테스트가 2020년 5월 9일 오후 2시부터 6시까지 진행되었는데요, 온라인으로 진행되었기 때문에 코로나19로부터
tech.kakao.com
#문제 풀이 아이디어
# 1. 정규식을 이용하여 숫자와 연산자를 나누어 리스트에 저장
# 2. 사칙연산 우선순위의 경우의 수만큼 연산후 비교 크기 비교
#수 나누기 함수 : 사친역산을 순서대로 리스트에 저장
import re
from itertools import permutations
def sep_nos(A):
ex = re.split(r'(\D)',A)
three_cals = ['*','+','-']
no_list = []
cal_list = []
for i in ex:
if i not in three_cals: no_list.append(i)
elif i in three_cals: cal_list.append(i)
return(no_list, cal_list)
#지정한 사칙연산에 따라 계산하고 리스트에 저장하는 함수(한번씩만 연산함)
def calculation (operator, no_list, cal_list):
for j in range(len(cal_list)):
temp_no = 0
if cal_list[j] == operator:
temp_no = eval(str(no_list[j])+operator+str(no_list[j+1]))
del no_list[j:j+2]
del cal_list[j]
no_list.insert(j,temp_no)
break
return (no_list, cal_list)
#input값 N에 대해 연산 최대값을 return하는 함수(정답함수)
def solution(N):
answer = 0
operators = [list(y) for y in permutations(['*','+','-'])]
result = []
for value in operators:
test_no_list, test_cal_list = sep_nos(N)
for x in value:
for y in range(len(test_cal_list)):
test_no_list1, test_cal_list1 = calculation(x,test_no_list,test_cal_list)
result.append(test_no_list1[0])
result = list(map(abs,result))
answer = max(result)
return answer
comment;
#1. 경우의 수를 List에 저장하기 위해서 "permutations()"함수를 사용 'from itertools import permutations'
#2. 정규표현식을 사용하면 쉽게 숫자와 연산자를 나눌 수 있다
#3. apped, del 등을 list에 사용하면 그 값은 전체 코드에서 적용되게 된다. 따라서 for구문을 사용 시 주의할 것!