/ 구현 1 /
from itertools import permutations
def calculate(a, b, oper):
if oper == '*':
return a*b
elif oper == '+':
return a+b
elif oper == '-':
return a-b
def solution(expression):
answer = 0
nums = []
opers = []
num = ''
for ex in expression:
if ex == "*" or ex == "+" or ex == "-":
opers.append(ex)
nums.append(num)
num = ''
else:
num += ex
oper_order = list(permutations(['-','*','+'],3))
print(oper_order)
sum = 0
for order in oper_order: # 각 우선순위정하기 후보마다
now_sum = 0
temp = []
nums_cp = nums
for o in opers: # 우선순위 순서대로 관련 값 계산 / 관련 없으면 그냥 넣고 다음 순서에서 계산하도록
if o == order: # 이번이 이 연산자 계산 순서야. 앞뒤애 계산해서 넣기
temp.append(calculate(nums_cp[opers.index(o), nums_cp[opers.index(o)+1, o]]))
else:
temp.append(nums_cp[opers.index(o)])
nums_cp = temp
print(nums, opers)
return answer
index error로 제출도 안 한 코드입니다. 실패는 성공의 어머니라고.. 그냥 기록용으로 남깁니다.
사실 아이디어 자체가 아예 망하지는 않았는데 미세한 부분에서 구현을 더 복잡하게 만들어버려서 망한 것 같습니다.
코딩 테스트 레벨은 각 단계마다 트레드밀이 있어서 어느 정도 범주에 올라서 다음 계단을 밟지 않으면 실력이 쭉 미끄러지는 것 같습니다. 다 아는 개념인데도 머릿 속으로 정리가 안 되어서 구현도 못 하게 됩니다. 억.. 울해.. 뭐 어쩌겠나요. 계속 반복해서 다음 계단으로 올리는 수밖에.. 누가 안 올려주니까 !
/ 제출 1 /
from itertools import permutations
from collections import deque
def solution(expression):
answer = 0
for priority in list(permutations(['+', '-', '*'], 3)):
answer = max(answer, abs(make_result(priority, expression)))
return answer
def make_result(priority, expression):
# arr 만들기
array = deque()
num = ''
for k in expression:
if k.isdigit():
num += k
else:
array.append(num)
num = ''
array.append(k)
array.append(num)
for op in priority:
stack = []
while len(array) != 0:
temp = array.popleft()
if temp == op:
result = calculate(int(stack.pop()), int(array.popleft()), op)
stack.append(result)
else:
stack.append(temp)
array = deque(stack)
return int(array.pop())
def calculate(a, b, oper):
if oper == '*':
return a*b
elif oper == '+':
return a+b
elif oper == '-':
return a-b
다른 분이 하신 코드를 2번 손코딩 한 뒤에 작성한 코드입니다.
길어지니 기능 사항이 눈에 잘 안 들어와서 함수로 좀 쪼갰습니다. 길이는 길지만 코드 자체는 이해하기 쉬울 것 같습니다.
제가 첫 구현에서 아차 싶었던 부분이 스택으로 계산 값들을 업데이트해주는 것이었습니다.
스택으로 만들어 계산하면 그 다음에 새 배열을 다시 선언해야 하나 그러면 너무 복잡하니 큐로 계속 해야겠다 싶었는데,
스택 + 데크를 적절히 섞어 사용하는 것이 답이었습니다.
사실 해당 구현은 비슷한 문제를 풀어본 적이 있는 걸 보니 경험과 반복이었으면 쉽게 해냈을텐데 아쉬움이 컸습니다.
어떤 문제에도 적용될 당연한 말이죠 뭐..
하여간 문제 푸는 감을 다시 끌어올린 느낌이 들어서 풀면서 재밌었던 문제였습니다.
'CodingTest > Programmers' 카테고리의 다른 글
[ 프로그래머스 ] 후보키 (0) | 2022.06.29 |
---|---|
[ 프로그래머스 ] 순위 검색 (0) | 2022.06.29 |
[ 프로그래머스 ] 다리를 지나는 트럭 (0) | 2022.06.26 |
[ 프로그래머스 ] 124 나라의 숫자 (0) | 2022.06.26 |
[ 프로그래머스 ] 타켓 넘버 < 다시 풀기 > (0) | 2022.06.25 |