코딩복습장

[백준] 1541번(python 파이썬) - 잃어버린 괄호 본문

코딩 테스트/python(파이썬)

[백준] 1541번(python 파이썬) - 잃어버린 괄호

코복장 2023. 2. 10. 18:31
728x90

문제 링크: https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

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

www.acmicpc.net


시간 제한 메모리 제한 제출 정답 맞힌사람 정답비율
2 초 128 MB 61928 32436 25732 51.878%

문제

세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.

그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.

괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 정답을 출력한다.

 

풀이


가장 최소값을 가지게 괄호를 나열하려면 어떻게 해야할까..?

숫자 앞에 -가 붙는 수를 최대한 늘린다. -> - 앞에 괄호를 넣는다.

하지만 여기서 고려해야 할 부분이 있다.  바로 -끼리 곱해지면 +가 된다는 부분이다.

해결방법은 -를 발견해 괄호를 치기 시작하고 중간에 -를 발견하게 된다면 발견한 또다른 - 직전에 괄호를 닫는 방식이다.

그리고 다른-앞에서 다시 괄호를 치기시작하면 된다. 만약 식이 끝나면 괄호를 닫아준다.

 

이렇게 된다면 -가 처음으로 시작되는 부분부터 숫자들은 전부 음수로 변하게 된다. ( 최솟값 )

 

-로 구분하는 가장 쉬운 방법 ->  split함수를 이용하면 된다.

  1. -를 구분자로 나눈다.
  2. - 구분자로 나눠진 부분들을 다시 +구분자로 나눠준 뒤 나눠진 부분들을 계산해준다(덧셈)
  3. 첫번째 계산된 부분을 결과값에 더한 뒤 나머지 부분을 결과값에서 빼준다.

 

 

구현코드


from sys import stdin
input = stdin.readline

temp = list(input().split('-')) # -를 구분자로 나누기
result = 0
arr = list(temp[0].split('+')) # +를 구분자로 나누기
for j in arr:
    result += int(j)
for i in range(1, len(temp)):

    arr = list(temp[i].split('+'))
    for j in arr:
        result -= int(j)

print(result)
728x90
Comments