본문 바로가기
ALGORITHM/BAEKJOON

[BOJ/Python] 1541. 잃어버린 괄호

by 안녕나는현서 2021. 8. 28.
728x90

📌 문제

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net

 

📌 문제 접근 방법

  1. 처음엔 내가 직접 수식을 풀 듯이 괄호를 넣어주기 위해 따로 temp리스트에 저장해서 계산하는 코드를 구현했었는데, 생각해보니 더 간단하게 표현할 수 있었다.
  2. 어쨌든 최소가 되기 위해서는 -가 많아야 한다.
  3. 그래서 첫 번째 -가 나온 이후로는 부호를 따질 것 없이 모든 숫자를 다 마이너스 해주면 된다!
    (어차피 괄호를 삽입하면 모든 숫자를 다 마이너스할 수 있으므로)
  4. 반복문과 함수를 사용해서 한 번이라도 -가 나온다면, 그 뒤로는 -연산만 해주도록 코드를 짜봤다.
    (-가 나오게 되면 puls변수가 False로 바뀌고 +연산을 하지 않는다.)

 

📌 코드

import sys

def plus_minus(ans):
    if plus:
        ans += temp
    else:
        ans -= temp
    
    return ans, 0

string = sys.stdin.readline().strip()   # 50-55+40

answer = 0
temp = 0
plus = True

for i in range(len(string)+1):
    if i == len(string):
        answer, temp = plus_minus(answer)
    elif string[i] == '-':
        answer, temp = plus_minus(answer)
        plus = False
    elif string[i] == '+':
        answer, temp = plus_minus(answer)
    else:
        temp = temp*10 + int(string[i])

print(answer)

 

728x90

'ALGORITHM > BAEKJOON' 카테고리의 다른 글

[BOJ/Python] 20437. 문자열 게임 2  (0) 2021.08.28
[BOJ/Python] 17298. 오큰수  (0) 2021.08.28
[BOJ/Python] 2805. 나무 자르기  (0) 2021.08.28
[BOJ/Python] 1920. 수 찾기  (0) 2021.08.21
[BOJ/Python] 10989. 수 정렬하기 3  (0) 2021.08.18

댓글