티스토리 뷰
문제 링크
● 문제 설명
문제 설명은 위 링크를 참고해주세요 ( 너무 길어서... )
● 문제 해결 방향
먼저 덧셈, 뺄셈, 곱셈으로 이루어져 있기 때문에 itertools.permutaion 함수로 모든 조합을 찾아 해결해도 괜찮을 것이라 생각한다.
그리고 주어진 변수가 string으로 되어있어 각 연산에대해 split함수를 통해 연산이 가능한 최소 단위까지 쪼갠다.
문자열 내에 연산이 1개 남았을 때 eval() 함수를 통해 연산을 실시하고, split으로 만들어진 배열을 연산 우선순위에 따라 적절한 연산기호로 join 하여 string을 만들고, eval() 함수를 적용시켜 연산을 실시하는 것을 반복한다.
● 문제 해결 코드
eval() 함수를 모르고 이 문제를 처음 접했고 연산 우선순위에 따라 split을 했을 때 3중 배열 까지 생성되어서
연산을 실시할 때 무식하게 반복문이 엄청나게 나오게 되었다.....
이후 eval()이라는 아주 간편한 함수를 발견했고 다음과 같은 답을 작성했다.
import itertools
def solution(expression):
arr = ['-', '+', '*']
cal_arr = itertools.permutations(arr, 3)
result = []
for cal in list(cal_arr):
ex1 = expression.split(cal[2])
ex = [ str(eval(cal[1].join([str(eval(i)) for i in ex1[e].split(cal[1])]))) for e in range(len(ex1))]
result.append(abs(eval(cal[2].join(ex))))
answer = max(result)
return answer
eval()을 써도 for문을 이렇게 남발해도 되나 싶을 정도로 많이썼다.
우선순위의 역순으로 split 한 후 최소 연산이 등장하면 ()로 묶어주고
모든 연산으로 join 한 후에 한 번에 eval()을 적용시켜 주었다.
--> 최소 연산이 생길 때마다 eval()을 적용시킨 부분을 최소화시켜주는 코드인 것 같다.
● 알게 된 것 / 아쉬운 점
eval() 짱.
'PYTHON' 카테고리의 다른 글
[프로그래머스/PYTHON] 2개 이하로 다른 비트 (0) | 2022.01.10 |
---|---|
[프로그래머스/PYTHON] 프린터 (0) | 2022.01.10 |
[프로그래머스/PYTHON] 프린터 (0) | 2022.01.09 |
[프로그래머스/PYTHON] [1차] 비밀지도 (0) | 2021.11.11 |
[프로그래머스/PYTHON] 행렬 테두리 회전하기 (0) | 2021.11.05 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 문제풀이
- redux
- error
- 백준
- js
- SPA
- Vue.js
- Vuex
- redux-thunk
- python
- Transpiler
- 상호평가
- AxiosInterceptor
- Vue
- Repository Pattern
- 파이썬
- v-for
- GraphQL
- reactrouter
- 알고리즘
- clean code
- webpack
- TypeScript
- React
- programmers
- bundler
- React.memo
- Preloading
- SOAP API
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함