본문 바로가기
백준

[백준] 1541번 : 잃어버린 괄호 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 8. 21.
728x90
반응형

 

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

해당 문제는 괄호를 어디에 쳤을 때 가장 최소가 되는 값을 얻을 수 있는지 구하는 문제이다.
값이 최소가 되려면 뺄셈 기호(-)를 기준으로 큰 값을 빼면 된다.
덧셈은 어차피 값이 커지므로 최대한 큰 값을 빼는 것을 목표로 한다.
뺄셈 기호(-)를 기준으로 식을 분리하고 분리된 식은 어차피 덧셈으로 값이 커진다. 하여 분리된 식을 각 계산한다.
계산한 결과 사이에는 모두 뺄셈이 존재하는 것이므로 뺄셈을 계산해 주면 최솟값이 나오게 된다.
 

  1. sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
  2. 식을 입력받아 마지막 enter를 제거한 뒤, -기호를 중심으로 식을 분리해 준다. s = sys.stdin.readline().rstrip().split('-')
  3. 분리한 식을 하나씩 추출하며 for i in range(len(s))
  4. 만약 추출한 식에 +기호가 포함되어 있다면 if ('+' in s[i])
  5. 해당 식을 계산한 결과를 저장할 변수를 생성하고 초기화한다. num = 0
  6. +기호를 중심으로 다시 식을 분리하고 분리된 값을 하나씩 추출하여 for j in s[i].split('+')
  7. 추출한 값을 정수형을 바꾸어 더해준다. num += int(j)
  8. 계산한 식의 결과를 저장해 준다. s[i] = num
  9. 반면에 추출한 식에 +기호가 포함되어 있지 않다면 else
  10. 추출한 식은 값 하나만 있는 식이므로 그냥 해당 값을 정수형으로 바꾸어 저장한다. s[i] = int(s[i])
  11. 하나의 값으로 모두 변환했다면 제일 처음 값을 정답에 저장한다. answer = s[0]
  12. 다음 값부터 하나씩 추출하며 for i in range(1, len(s))
  13. 정답에서 빼준다. answer -= s[i]
  14. 값을 모두 빼주었다면 정답을 출력해 준다. print(answer)
반응형

3. 소스코드

import sys

s = sys.stdin.readline().rstrip().split('-')

for i in range(len(s)):
    if ('+' in s[i]):
        num = 0
        for j in s[i].split('+'):
            num += int(j)
        s[i] = num
    else:
        s[i] = int(s[i])

answer = s[0]
for i in range(1, len(s)):
    answer -= s[i]

print(answer)
728x90
반응형