백준1541 잃어버린 괄호 [python]
https://www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
입력받은 식에 연산 순서..? 를 정해서 최솟값을 출력해야 하는 문제다.
입력값이 string이라서 일단 숫자를 다 분리할 생각을 했으나..
생각해보니 다 분리해버리면 - 의 위치를 모름..
그래서 일단 - 기준으로 먼저 나눠봄
입력 예제인 55-50+40 를 .split('-') 하면
['55', '50+40']
이런 식으로 나뉨
여기서 55 - (55 + 40) 은 55 - 55 - 40 이니까....
처음 55는 결괏값에서 더해주고, 두 번째 요소인 55+40은 첫 결괏값에서 빼주면 되겠구나라고 생각했음
(틀린 코드) 코드를 짜 봄
n = input().split('-')
roof = True
result = 0
for i in n:
j = i.split('+')
for k in j:
if roof:
result+=int(k)
else:
result-=int(k)
roof = not(roof)
print(result)
처음 입력받을 때 '-'를 기준으로 나눠주고
for문을 돌려서 -로 나눠놓은 배열의 각 요소 합을 처음에는 더하고 두 번째 돌 때는 빼줬음
"실패"
왜 틀렸나..? 0-100+50-100+50-100 넣어보면 알 수 있음 - 연산자가 여러 개 나오는 경우를 생각하지 않음ㅋㅋㅋ
생각해보니...
(정답 코드 1) 이상태에서 최솟값을 구하려면 그냥 55에서 50+40 더한 걸 빼 주면 됨
n = input().split('-')
result = 0
resultlist = []
for i in n:
j = i.split('+')
for k in j:
result += int(k)
resultlist.append(result)
result = 0
result = resultlist[0]
for i in resultlist[1:]:
result -= i
print(result)
아까와 다르게 - 연산자를 기준으로 나눈 배열 안의 각 요소들을 계산해서 넣어줌
예를 들어 0-100+50-100+50-100 면
+연산자가 있는 요소들은 계산되어 들어가서
resultlist 배열은 [0, 150, 150, 100] 이 됨
0번째 인덱스를 따로 빼두고 1번째 인덱스부터 for문 돌려서 0번째 인덱스에서 빼줬음
"정답"
(정답 코드 2) 이해하기 쉽게 코드를 정리해서 다시 작성해봄
def calculateList(list):
listEliment = []
for i in list:
listEliment.append(plusListEliment(i.split('+')))
return listEliment
def plusListEliment(list):
plusEliment = 0
for k in list:
plusEliment += int(k)
return plusEliment
def returnResult(list):
firstEliment = list[0]
otherEliment = 0
for i in list[1:]:
otherEliment -= i
return firstEliment + otherEliment
n = input().split('-')
print(returnResult(calculateList(n)))