반응형
https://www.acmicpc.net/problem/1541
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 |