카테고리 없음

[카카오코딩테스트] 2020 Internship 문제 2번

푸른잎 뱅갈고무나무 2021. 4. 20. 13:09

문제 출처: 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 (operatorno_listcal_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구문을 사용 시 주의할 것!