코딩 테스트 스터디/백준

[실버 II] 1541번. 잃어버린 괄호

남쪽마을밤송이 2022. 8. 23. 19:38

 문제 

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

 사용 언어 

Python3

 풀이 과정 

처음에는 어디까지가 숫자이고 문자인지 구분하는 방법을 고민하면서 인덱스를 사용하는 방법, 스택을 사용하는 방법 등을 고민했는데 아무리 생각해도 가장 편한 방법은 split이고...

그런데 +와 - 두 가지이기 때문에 고민하다가 모든 숫자를 뺐을 때 가장 작은 수가 되기 때문에 일단 -를 기준으로 나눴다.

그런 다음 각각의 원소에 또 +가 포함된 경우가 있기 때문에 나눠서 더한 숫자를 다 빼면 된다고 생각했다.

그런데 이렇게 처음 짰을 때 예제 입력 2에서 오류가 났다. +만 있는 경우이기 떄문에..! 그래서 처음 숫자만 더해 시작하도록 변경~

 

해서 아래는 처음 맞았습니다!가 나온 코드이지만 최종 제출 답안이 좀 더 빠르다. pop(0)도 있고 int를 하는 roop와 sum을 하는 roop이 별개라서 그런 것 같다.

from sys import stdin
input = stdin.readline

# - 이후의 +는 다 -로 치환
# - 이후의 -도 -로 계산
if __name__ == "__main__":
    formula = input().strip().split("-")
    init = map(int, formula.pop(0).split("+"))
    result = sum(init)
    for i in formula:
        seperate = list(map(int, i.split("+")))
        result -= sum(seperate)
    print(result)

이 문제는 그리디 알고리즘이었는데 정말 딱히 다른 풀이법도, 멋진 코드도 찾지 못해서 여기서 끝이다!

 

 제출 답안 

from sys import stdin
input = stdin.readline

# - 이후의 +는 다 -로 치환
# - 이후의 -도 -로 계산
if __name__ == "__main__":
    formula = input().strip().split('-')
    result = 0
    for i in formula[0].split('+'):
        result += int(i)
    for i in formula[1:]:
        for j in i.split('+'):
            result -= int(j)
    print(result)