문제
https://programmers.co.kr/learn/courses/30/lessons/67257
나의 코드
from itertools import permutations
def solution(expression):
answer=0
tmp = list(permutations(['+','-','*'],3))
expression=[expression]
expression=change(expression,'+')
expression=change(expression,'-')
expression=change(expression,'*')
for tmpp in tmp:#tmpp=['+','-','*']
target=expression.copy() #target=>expression저장
for pmp in tmpp: # 우선순위대로 불러오기 pmp= +
for index in range(len(target)):#우선순위대로 기호접근
if target[index]==pmp: # 우선순위 기호 만나면
target[index+1]=calc(int(target[index-1]),int(target[index+1]),pmp)#계산 a + b 값을 b에 대입
for index in range(len(target)):# 모두 계산된 후 a와 기호를 제거해야 다음 우선순위 기호를 계산가능
if target[index]==pmp: # a와 기호를 x처리한다.
target[index-1]='x'
target[index]='x'
target=list(filter(lambda x : x!='x',target))#x처리된 것을 배제하고 나머지를 pmp에 넣고 다음 기호로 넘어감
answer=max(answer,abs(target[0]))#절대값이 가장 큰 값을 답으로 선택하기 위함.
return answer
def change(expression,pmp): #문자열에서 숫자와 기호로 분리하기 위한 함수
tmpp=[]
for i in expression:
if pmp in i:
for j in i.split(pmp):
tmpp.append(j)
tmpp.append(pmp)
tmpp=tmpp[:-1]
else:
tmpp.append(i)
return tmpp
def calc(a,b,pmp): 문자로 되어있는 기호로 연산을 하기위한 함수
if pmp=='+':
return a+b
elif pmp=='-':
return a-b
else:
return a*b
풀이
단순한 구현문제였다. permutation으로 우선순위전체의 경우의 수를 저장한 후 차례차례 값을 뽑은 후 가장 큰 값을 선택하는 식으로 문제를 해결하였다.
예를 들어 a+b 수식이 있고 +기호를 처리할 때 a+b에서 b위치에 a+b값을 넣은 후 a와 +를 리스트에서 제거하는 식으로 계산을 처리하였다.
-----------------------------------------------------------------------------------------------------------------------------------
검색해서 처리한 부분
1.filter함수
filter(함수, 적용할 리스트)-> 리스트 요소를 하나씩 선택해서,
함수의 결과 true로 하는 리스트 요소만 골라 저장한다.
결과값은 filter 객체이기 때문에 list()로 묶어서 표현하게 될 것이다.
'공부-코딩테스트 > 코테풀이 - 자바, 파이썬' 카테고리의 다른 글
전화번호 목록 (코딩테스트, 프로그래머스) (0) | 2022.02.17 |
---|---|
위장 (코딩테스트, 프로그래머스) (2) | 2022.02.08 |
124의 나라 (코딩테스트, 프로그래머스, 파이썬) (0) | 2022.02.04 |
다리를 지나는 트럭 (코딩테스트, 프로그래머스) (0) | 2022.01.27 |
튜플 (코딩테스트, 프로그래머스) (0) | 2022.01.25 |
댓글