1541 잃어버린 괄호
업데이트:
1. 문제
문제는 링크에 들어가면 있다.
2. 정답 코드
문제의 내 정답 코드는 다음과 같다.
import sys
read= sys.stdin.readline
input_text = read().split()
input_text = input_text[0]
minus_split_text = input_text.split("-")
from collections import deque
minus_split_text = deque(minus_split_text)
# 첫번째엔 무조건 숫자가 오니까 그 숫자를 일단 빼자.
# 근데 이 묶음에 +가 있을수도있음.
now_text = deque(minus_split_text.popleft())
results = 0
while now_text:
temp = now_text.popleft()
if temp == "+":
continue
# 숫자인 경우임.
else:
temp_val = temp
while now_text :
temp_ = now_text.popleft()
if temp_ == "+" :
results += int(temp_val)
temp_val = ''
continue
else :
temp_val += temp_
results += int(temp_val)
# 이제 묶여있는 것들은 전부 -로 분리되는 것들임. 즉, 앞에 무조건 -가 붙는다는 것임
# 그니까 그것들끼리 전부 값을 더해주면 끝.
for i in range(len(minus_split_text)):
now_text = deque(minus_split_text[i])
minus_results = 0
while now_text:
temp = now_text.popleft()
if temp == "+":
continue
# 숫자인 경우임.
else:
temp_val = temp
while now_text :
temp_ = now_text.popleft()
if temp_ == "+" :
minus_results += int(temp_val)
temp_val = ''
continue
else :
temp_val += temp_
minus_results += int(temp_val)
results -= minus_results
print(results)
인터넷을 참고한 좀더 깔끔한 풀이방법은 다음과 같다.
import sys
read= sys.stdin.readline
input_text = str(read())
# 앞에 마이너스가 붙은것을 고려해 쪼개자
minus_split_text = input_text.split("-")
# 첫번째는 무조건 숫자니까 +가 있는 경우를 고려해서 더하자.
results = sum(map(int,minus_split_text[0].split("+")))
minus_results = 0
for a in range(1,len(minus_split_text)):
minus_results += sum(map(int,minus_split_text[a].split("+")))
results -= minus_results
print(results)
3. 풀이 및 생각
문제 풀이
이 문제의 핵심은 list.split()과 map()함수이다. 최소가 되게 하려면, -부호가 붙은 수가 커야한다. 따라서 -의 뒤에 나오는 수를 크게 해야한다. 즉, -를 기준으로 입력 값을 split(“-“)을 하자.
그리고 첫번째 숫자는 무조건 숫자이므로, map()을 이용해서 int 로 바꿔주며 초깃값을 설정하자. 단, 이때 +가 섞여있을 수 있으므로 split(“+”)을 하는 것을 잊지말자.
나의 생각
와.. 너무너무 간단하게 끝나는 풀이이다. 깔끔해서 맘에든다. 이번에 다시 split()과 map()의 장점에 대해서 알게되었고 특히 map()을 맨날 입력으로만 썼는데 이렇게 문제에도 응용할 수 있다는 것을 깨달았다. str을 숫자로 바꾸는 것을 항상 생각!!