728x90
https://programmers.co.kr/learn/courses/30/lessons/67257
- 코드
from itertools import permutations
# 현 우선순위에 따라 연산하기
def money(prior,oper,num):
for p in prior:
while p in oper:
i = oper.index(p)
num[i] = str(eval(num[i] + p + num[i + 1]))
num.pop(i + 1)
oper.pop(i)
return num[0]
def solution(expression):
# 계산할려면 리스트여야 할듯
num = []
oper = []
start = 0
for idx, i in enumerate(expression):
if i in ['+', '*', '-']:
# 피연산자
num += [expression[start:idx]]
# 연산자
oper += [i]
start = idx + 1
# 마지막 남은 피연산자
num += [expression[start:]]
# 중복 삭제
oper1 = list(set(oper))
max_money = 0
# 우선순위
for prior in list(permutations(oper1,len(oper1))):
numbers = num.copy()
operator = oper.copy()
# 연산
result = money(prior,operator,numbers)
# 최대값인지 확인
if max_money < abs(int(result)):
max_money = abs(int(result))
return max_money
- 풀면서 도움 된 코드
- 얕은 복사 / 깊은 복사
- 수업을 들을 때는 잘 와닿지 않았는데 내가 필요한 부분에 딱 쓰니깐 이해됨
- 얕은 복사(대입연산자(=), 슬라이싱([:]))
- 원본도 변함
- 깊은 복사(.copy())
- 원본은 그대로
- eval()
- 사칙연산 관련 문제에서 연산자가 여러개 나올 경우 하나하나 if문 작성했었는데... 알게 되서 행복한 함수
- 문자열이나 표현식, 변수들을 입력으로 받아 이를 계산하고 반환해주는 함수
- eval(3 + '+' + 5) -> 8로 반환
- from itertools import permutations
- 역시나 배웠을 때는 못써먹더니 내가 딱 필요한 상황에서는 머리에 쏙쏙 들어온다. 문제를 많이 풀어야겠다.
- list(permutations(리스트, n)) : 리스트에서 n개씩 뽑는 경우의 수 모두
- 얕은 복사 / 깊은 복사
728x90
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
[프로그래머스] Lv.1 로또의 최고 순위와 최저 순위 - Python (0) | 2022.06.04 |
---|---|
[백준] 1697. 숨바꼭질 - Python (0) | 2022.06.03 |
[프로그래머스] Lv.1 키패드 누르기 - Python (0) | 2022.06.02 |
[백준] 2841. 외계인의 기타 연주 - Python (0) | 2022.06.01 |
[백준] 2644. 촌수계산 - Python (0) | 2022.06.01 |
댓글