[Baekjoon][Python] 1541번 잃어버린 괄호

Kim Tae Won·2022년 1월 21일
0
post-thumbnail
post-custom-banner

1541번 잃어버린 괄호

문제

풀이

일단 문제를 먼저 분석해보자.

  • +, -만 존재하기 때문에 이 둘 사이의 규칙을 잘 파악하면 된다.
    예를 들어, 55-50+40 인 경우 55-(50+40)일 경우에 결과가 가장 작아지게 된다. 이처럼 -가 등장했을 경우, 다음으로 -가 나오기 전까지 괄호로 묶어 빼는 값이 커지도록 하면 된다. 즉, 빼는 수를 최대로 만들어주면 된다.
  • 전체적인 개념을 정리하자면, 더하기를 모두 먼저 계산하는 것과 같은 효과이다.

이러한 개념을 토대로 작성한 코드는 다음과 같다.

  • 먼저 숫자를 떼어내기 위해 ord()-아스키코드값으로 변환메소드를 사용하였다.
  • 그리고 이를 모두 연산자와 피연산자를 따로 큐에 넣어 처리하였다.
    • 큐에 넣지 않고 첫번째 for문에서 바로 처리하는 방법도 있지만, 코드의 직관적인 부분을 위해 따로 처리하였다.
  • -가 나오게 되면, 다음 -가 나올 때 까지의 수는 모두 더하여 빼주는 알고리즘 이다,
import sys

inputData = sys.stdin.readline().strip()

operand = []
operator = []

temp = ""
for ch in inputData:
    if ord(ch) >= 48 and ord(ch) <= 57:
        temp += ch
    else:
        operator.append(ch)
        operand.append(int(temp))
        temp = ""
operand.append(int(temp))
result = operand.pop(0)
tempsum = 0
flag = 0
while(len(operand) != 0):
    opt = operator.pop(0)
    if opt == '-':
        if flag == 1:
            result -= tempsum
            tempsum = 0
        flag = 1
        tempsum += operand.pop(0)
    else:
        if flag == 0:
            result += operand.pop(0)
        else:
            tempsum += operand.pop(0)
result -= tempsum
print(result)

결론

문제를 푸는 것이 어렵지는 않았지만, 풀고 난 뒤에 다른 사람들의 풀이를 보니 다양한 생각이 존재하고, 더 효율적인 방법도 있다는 것을 알게 되었다. 이렇게 내가 직접 풀고 남의 풀이를 비교해보는 것도 실력향상에 큰 도움이 되는 것 같다.

profile
꿈이 너무나 큰 평범한 컴공 대딩에서 취업 성공!
post-custom-banner

0개의 댓글