본문 바로가기
Problem Solving/BOJ

[BOJ][Python]1541번 풀이

by NoiB 2022. 6. 27.
반응형

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

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net

s = input()
check = 1
num = ''
ans = []
for i in s:
    if i == '-': 
        ans.append(check*int(num))
        num=''
        check = -1
    elif i == '+':
        ans.append(check*int(num))
        num=''
    else:
        num += i
ans.append(check*int(num))
# print(ans)
print(sum(ans))

생각보다 풀이법을 떠올리기 힘든 문제였습니다. 괄호라는 말에 현혹되어서 식 사이에 어떻게 괄호 표시를 집어넣고 그걸 식으로 인식시키지? 하는 어처구니 없는 고민이나 계속 하고 있다가 방법이 안떠올라서 좀 쉬다가 왔더니 굳이 그럴 필요가 없더라구요. 그 다음부터는 쉬웠습니다. 한 번이라도 음수가 나온다면 그 뒤로는 모조리 음수로 만들어버리는게 가장 작은 값을 만드는 방법이기 때문에 모조리 음수로 바꿔주기 위해서 부호 조절용 변수를 하나 만들었습니다(실제로 괄호가 있다고 가정하면 분배 법칙 때문에 괄호를 풀면서 모조리 -를 붙일 수 있기 때문에 상관없습니다). 몇 번이고 check를 -1로 초기화 하겠지만 크게 상관없겠죠. 한 번도 -가 안나온다면 전부 + 이니 check는 맨 처음에 1로 놔둔채로 풀면 될 것 같습니다. 맨마지막에는 부호가 없어서 지금 반복문 만으로는 append를 할 수 없으니 추가해주는 코드를 반복문이 끝나고 하나 넣어주면 되겠습니다. 변수 이름이 확실히 기억이 안나는데 문자열을 그대로 수식으로 바꿔주는 함수의 경우 이번 문제에서는 사용할 수 없습니다(0으로 시작하는 숫자도 입력되기 때문).

 

최근 들어서는 이런 적이 별로 없어서 없어졌나 싶었지만 버릇이란게 그렇게 쉽게 고쳐지지는 않는 모양입니다. 사설을 하나 더 추가하자면 이게 진짜 그리디인가? 싶은 생각도 들긴하네요. 제가 그리디 문제를 별로 안풀어봐서 그런가 싶기도 하지만요.

반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ][Python]1120번 풀이  (0) 2022.06.28
[BOJ][Python]1780번 풀이  (0) 2022.06.28
[BOJ][Python]2720번 풀이  (0) 2022.06.27
[BOJ][Python]11727번 풀이  (0) 2022.06.26