[백준] [Class3] [Silver II] 잃어버린 괄호 - 1541 (파이썬 / Python)
[Silver II] 잃어버린 괄호 - 1541
성능 요약
메모리: 30616 KB, 시간: 36 ms
분류
그리디 알고리즘(greedy), 수학(math), 파싱(parsing), 문자열(string)
문제 설명
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
arr = input().split('-') # '-' 기준으로 나눈다
s = 0
for i in arr[0].split('+'): # arr 첫 번째 값에 '+'가 있다면
s += int(i) # 값들을 서로 더해줘서 첫 번째 값을 얻는다.
for i in arr[1:]: # 두번째 값 부터 시작
for j in i.split('+'): # i에 '+'가 있다면 j로 하나씩 받아서 첫 번째 값 s에 모두 빼준다.
s -= int(j)
print(s)
'''
TIL/회고
- 시간 내에 안 떠올라 결국 답지를 봤다.. 문자열 너무 어렵다 하아...
'''
풀이
- 최솟값은 ‘-‘ 이후에 ‘+’ 가 나오면 모두 더해서 ‘-‘ 를 붙여주면 최솟값이 된다. 즉, ‘-‘ 가 있다면 ‘-‘ 를 기준으로 괄호를 치고 ‘+’ 들을 모두 먼저 더해야 한다.
- ’+’ 값들을 모두 더해주려면 우선 ‘-‘ 기준으로 split을 해줘서 리스트를 만든다.
- 예를 들어 3 + 4 - 3 - 10 + 24 -> [‘3+4’ ‘3’ ‘10+24’] 로 나눠진다.
- 그리고 ‘+’ 기준으로 값을 더해주는데 먼저 첫 번째 값이 ‘+’ 로 이뤄져 있다면 더해서 첫 번째 값을 먼저 가진다.
- 첫 번째 값 이후 ‘-‘ 가 있다면 모두 빼주면 되기 때문이다.
- [‘7’ ‘3’ ‘10+24’]
- 그 후 두 번째 값부터 ‘+’ 가 있다면 더 해서 첫 번째 값에 빼주고, ‘+’ 가 없으면 그냥 빼준다.
- 7 - 3 - 34 = -30
Class3은 아직 무리인걸까.. 처음에는 리스트에 ‘+’ index와 전과 후의 값들을 제거하고 더한 값을 넣어주려고 했다. 그러다 제거하는 과정에서 index 값들이 꼬이면서 미궁 속으로.. 코드도 너무 길어지고 시간도 너무 흐르고 단단히 방향을 잘못 잡았구나 싶었다 ㅠㅠ 결국 다른 분들의 풀이를 보고 정말 짧고 간단했다. 문자열 문제 너란 녀석 아직 어렵다..😭
댓글남기기