코딩복습장
[백준] 1541번(python 파이썬) - 잃어버린 괄호 본문
728x90
문제 링크: https://www.acmicpc.net/problem/1541
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌사람 | 정답비율 |
2 초 | 128 MB | 61928 | 32436 | 25732 | 51.878% |
문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
풀이
가장 최소값을 가지게 괄호를 나열하려면 어떻게 해야할까..?
숫자 앞에 -가 붙는 수를 최대한 늘린다. -> - 앞에 괄호를 넣는다.
하지만 여기서 고려해야 할 부분이 있다. 바로 -끼리 곱해지면 +가 된다는 부분이다.
해결방법은 -를 발견해 괄호를 치기 시작하고 중간에 -를 발견하게 된다면 발견한 또다른 - 직전에 괄호를 닫는 방식이다.
그리고 다른-앞에서 다시 괄호를 치기시작하면 된다. 만약 식이 끝나면 괄호를 닫아준다.
이렇게 된다면 -가 처음으로 시작되는 부분부터 숫자들은 전부 음수로 변하게 된다. ( 최솟값 )
-로 구분하는 가장 쉬운 방법 -> split함수를 이용하면 된다.
- -를 구분자로 나눈다.
- - 구분자로 나눠진 부분들을 다시 +구분자로 나눠준 뒤 나눠진 부분들을 계산해준다(덧셈)
- 첫번째 계산된 부분을 결과값에 더한 뒤 나머지 부분을 결과값에서 빼준다.
구현코드
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
'코딩 테스트 > python(파이썬)' 카테고리의 다른 글
[백준] 7576번(python 파이썬) - 토마토 (0) | 2023.02.10 |
---|---|
[백준] 2578번(python 파이썬) - 빙고 (0) | 2023.02.10 |
[백준] 1149번(python 파이썬) - RGB거리 (0) | 2023.02.10 |
[백준] 11724번(python 파이썬) - 연결 요소의 개수 (0) | 2023.02.10 |
[백준] 1991번(python 파이썬) - 트리순회 (0) | 2023.02.10 |
Comments