이번 문제는 런타임에러가 계속 나서 고생을 좀 했습니다.. 😂 쉬운 문제 같았는데 계속 틀리더라구요! 결론적으로 문제에서 주어진 조건에 따른 반례를 고려하지 못해서 틀렸습니다. 예를 들어 '수는 0으로 시작할 수 있다.' 나 연산자 없이 숫자 하나만 입력받는 경우 등이 있습니다.
문제에서 우리가 알 수 있는 테스트케이스는 55-50+40 밖에 없으므로, 런타임에러가 나는 분들은 반례가 될 수 있는 것들을 찾아서 넣어보시길 추천드립니다!
💡solutions )
💬 크게 세 부분으로 나눠서 로직 구현 👇
💬 주어진 식에 '-' 연산자 있는 경우 / '-'없이 '+' 연산자만 있는 경우 / 연산자 없이 숫자 하나만 입력받는 경우
💬 '-' 연산자가 있는 경우 : 최초의 마이너스 연산자를 기점으로 f, b으로 문자열을 슬라이싱 한다.
💬 이유는 최초의 마이너스 이후의 값들은 모두 마이너스 연산에 포함해 계산해야 최솟값이 나오기 때문이다.(즉, 최초 마이너스 이후의 값들은 모두 빼준다)
💬 그래서 아래 로직에서는 b 문자열에서 '-'가 나온 경우 '+'로 바꾼 후 -> '+' 기준으로 슬라이싱하여 나온 수들을 answer에서 빼주었다.
💬 아래 간단한 예시를 들었다.
예시로 '0+10-20+0-30' 식을 들자면 -> '-'를 기점으로 f = '0+10', b = '20+0-30'으로 나눌 수 있고 -> answer에 f 문자열 식의 총합(10)을 더하고, b 문자열에서 각 숫자들을 모두 더한 값(50)을 빼주면 답은 -40이 된다. |
🎫code )
nums = input()
answer = 0
if '-' in nums: # 식에 - 연산자 있는 경우
for i in range(len(nums)):
if nums[i] == '-':
f, b = nums[:i], nums[i + 1:]
break
for i in f.split('+'):
answer += int(i)
b = b.replace('-', '+').split('+')
for i in b:
answer -= int(i)
elif '+' in nums: # 식에 + 연산자만 있는 경우
for i in nums.split('+'):
answer += int(i)
else: # 연산자 없이 숫자 하나만 입력 받는 경우
answer = nums
print(answer)
📌 description )
문제출처 : www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
문제세준이는 양수와 +, -, 그리고 괄호를 가지고 길이가 최대 50인 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다. 괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오. 입력첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다.출력첫째 줄에 정답을 출력한다.출처
알고리즘 분류 |
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 후보 추천하기 / 1713번 / 파이썬 / Python / defaultdict (2) | 2020.10.21 |
---|---|
[백준] 회의실 배정 / 1031번 / 파이썬 / Python / 정렬 / 그리디 (0) | 2020.10.20 |
[백준] ATM / 수 정렬하기 / 파이썬 / Python / 정렬 (2) | 2020.10.12 |
[백준] 최단경로 / 1753번 / 파이썬 / Python / Dijkstra (0) | 2020.10.09 |
0608_백준 1051번 : 숫자 정사각형/ 부르트포스 알고리즘/ Python (0) | 2020.06.08 |