문제
https://www.acmicpc.net/problem/1541
사용 언어
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)
'코딩 테스트 스터디 > 백준' 카테고리의 다른 글
[실버 I] 1074번. Z (0) | 2022.08.25 |
---|---|
[실버 I] 11286번. 절댓값 힙 (0) | 2022.08.24 |
[골드 V] 17352번. 여러분의 다리가 되어 드리겠습니다! (0) | 2022.08.17 |
[실버 III] 17626번. Four Squares (0) | 2022.08.16 |
[골드 V] 5430번. AC (0) | 2022.08.12 |