Greedy(11)_잃어버린_괄호(1541)

BJO 1541 잃어버린 괄호

문제이해

처음에 이게 대체 뭔 말인가 싶었다. 55-50+40을 하는데 어떻게 -35라는 최소값이 출력되지 ? 검색을 몇번 해보니

55-(50+40) 이렇게 한다면 최소값을 구할 수 있다. 따라서 -가 붙은 수 왼쪽에 괄호하나를 추가하고,숫자를 모두 더한다음, -기호가 나오기 전에 숫자를 뺴주면 된다.)

기존에 자바를 사용했을 땐, string tokenizer를 사용했었다. python에서는 파싱을 어떻게 해주면 좋을까? 단순히 for문을 돌려서 사용하는 것 보다 더 효율적인 방법은 없을까?

Q) 파이썬에서는 문자열의 끝을 어떻게 접근하지 ? -> 그 방법이 없는 것 같다.. EOF는 없으니까. flag이용하는 수밖에 없지 않나? Q) 문자열의 갯수만큼 for문을 돌리면, 50을 5와 0으로 띄어서 해석할텐데, 이러면 어떻게 하지 ? -> 문자열은 더하면 문자열이니까. 그 전에 더해주면 되지 않을까.

문제 풀이 과정

  1. minuSum= 0
  2. 입력받은 String을 “-“을 기준으로 분리한다
  3. 첫 번째 원소는 그냥 더해주고
  4. 나머지 원소는 각각의 원소에 대하여 합을 구한 뒤 miniSum 에서 빼준다.
  • 예외처리 -> -가 없으면 런타임 에러 발생 -> 예외처리 잘해줘야 한다 ‘\’ -> 정규표현식. 특수문자 표현

코드

import sys

STR = sys.stdin.readline().rstrip()
arr = list(STR.split("-"))

Sum = 0
for i in range(len(arr)):
    arr2 = list(arr[i].split("+"))

    Sum2 = 0
    for j in range(len(arr2)):
        Sum2 += int(arr2[j])

    if(i == 0):
        Sum2 *= -1
    Sum -= Sum2
print(Sum)


참고자료 [문제풀이 이해 블로그]https://stack07142.tistory.com/195

0%