시작이 반

[백준] 1541번 (python 파이썬) 본문

알고리즘/백준

[백준] 1541번 (python 파이썬)

G_Gi 2021. 3. 1. 01:54
SMALL

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

그리디 문제라고 나와있지만 그리디 보다는 문자열 처리 문제같다...

-가 나오면 다음 - 가 나올때까지 숫자를 더해주고 더한 숫자를 list에 저장하고를 반복한다.

 

list에 저장된 숫자를 다 더한후 음수로 만들고 맨 처음 숫자를 더해준다.

 

express = input()
split = list()
result = list()

start = 0
for i in range(len(express)):
    if express[i] == '-' or express[i] == '+':
        split.append(int(express[start:i]))
        split.append(express[i])
        start = i + 1
split.append(int(express[start:]))

start = 0
for i in range(len(split)):
    if split[i] == '-':
        end = i - 1
        sum_number = 0
        for j in range(start, end+1):
            if split[j] != '+':
                sum_number += split[j]
        result.append(sum_number)
        start = i + 1

sum_number = 0
for j in range(start, len(split)):
    if split[j] != '+':
        sum_number += split[j]
result.append(sum_number)

print(result[0]-(sum(result) - result[0]))

 

다른방법

처음 나오는 - 를 기준으로 좌우를 나누고 부호에 상관없이 왼쪽에 있는 숫자끼리 더하고 오른쪽에 있는 숫자끼리 더한 값을 빼준다.

(   왼쪽 숫자 더한값   ) - (   오른쪽 숫자 더한값   ) 

express = input()
split = list()

start = 0
for i in range(len(express)):
    if express[i] == '-' or express[i] == '+':
        split.append(int(express[start:i]))
        split.append(express[i])
        start = i + 1
split.append(int(express[start:]))

idx = 0
left = 0
right = 0
try:
    idx = split.index('-')
    for i in range(idx):
        if split[i] != '-' and split[i] != '+':
            left += split[i]
    for i in range(idx, len(split)):
        if split[i] != '-' and split[i] != '+':
            right += split[i]
    print(left - right)
except:
    for i in range(len(split)):
        if split[i] != '-' and split[i] != '+':
            left += split[i]
    print(left)
LIST