Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- spring batch 5.0
- 개발자 취업
- infcon 2024
- 구글 OAuth login
- JavaScript
- 코딩테스트 준비
- jwt
- 빈 충돌
- 프로그래머스
- DesignPattern
- 파이썬
- KPT회고
- 개발자부트캠프추천
- 1주일회고
- Python
- 커스텀 헤더
- 디자인 패턴
- 프로그래머스 이중우선순위큐
- 99클럽
- @FeignClient
- 전략패턴 #StrategyPattern #디자인패턴
- 빈 조회 2개 이상
- jwttoken
- 취업리부트코스
- 인프콘 2024
- 항해99
- 디자인패턴
- Spring multimodule
- TiL
- 단기개발자코스
Archives
- Today
- Total
m1ndy5's coding blog
프로그래머스 수식 최대화 with Python 본문
https://school.programmers.co.kr/learn/courses/30/lessons/67257
문제를 풀다가 풀릴듯 잘 안풀려서 다른 사람들은 어떻게 풀었나 하고 찾아봤는데 진짜 너무 깔끔한 코드가 있어서 공부할겸 포스트를 작성해야겠다.
from re import split
from itertools import permutations
def solution(expression):
values = []
# permutations으로 가능한 조합을 모두 계산해본다.
for priority in permutations(['*', '+', '-'], 3):
# 연산자를 기준으로 숫자 리스트를 만든다.
operands = list(map(int, split('[\*\+\-]', expression)))
# 연산자만 따로 저장한다.
operators = [c for c in expression if c in '*+-']
for op in priority:
while op in operators:
# 우선순위에 해당하는 연산자의 위치를 저장한다.
i = operators.index(op)
# 해당 연산자에 대한 계산을 진행한다.
if op == '*':
v = operands[i] * operands[i+1]
elif op == '+':
v = operands[i] + operands[i+1]
else:
v = operands[i] - operands[i+1]
# 계산된 결과값을 업데이트한다.
operands[i] = v
operands.pop(i+1)
# 연산자 리스트를 업데이트 다.
operators.pop(i)
values.append(operands[0])
# 제일 절대값이 큰 값을 꺼낸다.
return max(abs(v) for v in values)
이와 같은 풀이랑 비슷하게 생각은 했었는데 expression을 계속해서 나눌 수 있다는 것을 생각을 못해서 원본리스트가 자꾸 망가져서 어떻게 다 계산해보지 했는데 계속 원본 expression을 나눠도 되는거였다(?)
시간 복잡도에 대해서 조금 더 공부가 필요할 것같다.
'알고리즘 with python > 알고리즘 스터디' 카테고리의 다른 글
프로그래머스 보석 쇼핑(투포인터 알고리즘) with Python (1) | 2023.12.19 |
---|---|
프로그래머스 리코쳇 로봇 with python (1) | 2023.12.12 |
유클리드 호제법으로 최대공약수, 최소공배수 구하기 (1) | 2023.12.06 |
프로그래머스 이중우선순위큐 python (1) | 2023.12.04 |
Permutation & Combination 식 (0) | 2023.03.16 |