백준 1541번 잃어버린 괄호

highway92·2021년 9월 9일
0

백준

목록 보기
2/27

문제출처:https://www.acmicpc.net/problem/1541

풀이

고려사항
1. 우선 문자열로 입력받은 숫자들과 기호들을 잘 사용 할 수 있게 분리해야한다.

처음에는 replace와 split을 섞어 분리했지만 결과적으로는 기호들도 필요했기에 반복문을 사용하여 작업을 해주었다.

  num = input()

  nums=[]
  temp="" #저장될 값의 임시변수
  for i in num:
      if i.isdigit(): # 숫자이면 temp문자열에 추가
          temp += i
      else: # 숫자가 아니라 기호라면 추가해주고 temp 초기화
          nums.append(temp)
          nums.append(i)
          temp=""
  nums.append(temp) #마지막은 숫자라고 했기에 마지막 숫자까지 추가
  

2.하다보니 복잡하게 풀게 되었는데 사실 처음으로 "-"를 만나고나면 뒤의 숫자들은 모두 빼주면 된다.

처음에는 -를 다시 만나면 무언가 해줘야 할 거라고 생각했는데 아니었다. 그냥 다 빼주면 최소값을 만들 수 있다.

plus=[]
minus=[]
q= deque(nums)

flag = True

while q:
    target = q.popleft()

    if target.isdigit() and flag == True:
        plus.append(int(target))
        continue
    if target == "-":
        flag = False
        continue
    if target.isdigit() and flag == False:
        minus.append(int(target))


return sum(plus) - sum(minus)

전체코드

맨 처음 통과한 코드

from collections import deque
def solve():
num = input()

nums=[]
temp=""
for i in num:
    if i.isdigit():
        temp += i
    else:
        nums.append(temp)
        nums.append(i)
        temp=""
nums.append(temp)

plus=[]
minus=[]
q= deque(nums)

flag = True

while q:
    target = q.popleft()

    if target.isdigit() and flag == True:
        plus.append(int(target))
        continue
    if target == "-":
        flag = False
        continue
    if target.isdigit() and flag == False:
        minus.append(int(target))


return sum(plus) - sum(minus)

solve()

글을 쓰면서 깨닫고 작성한 코드

def solve():
  num = input()

  nums=[]
  temp=""
  for i in num:
      if i.isdigit():
          temp += i
      else:
          nums.append(temp)
          nums.append(i)
          temp=""
  nums.append(temp)

  plus=[]
  minus=[]
  flag = True
  for i in nums:
    if flag == True and i.isdigit():
      plus.append(int(i))
    elif i == "-":
      flag = False
    elif flag == False and i.isdigit():
      minus.append(int(i))
    else:
        continue

  return print(sum(plus)-sum(minus))
solve()
profile
웹 개발자로 활동하고 있습니다.

0개의 댓글