업데이트:

카테고리: , ,

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을 숫자로 바꾸는 것을 항상 생각!!

1 분 소요