
이 문제는 정답 비율이 내가 풀 당시 기준으로 52%로 꽤 높았다.
하지만 역시 틀렸다..
내가 생각한 방법은 다음과 같다.
question = input()
digits = []
operations = []
tmp_num = ''
answer = 0
for i in question:
if i.isdigit():
tmp_num += i
else:
digits.append(int(tmp_num))
tmp_num = ''
operations.append(i)
digits.append(int(tmp_num))
if len(digits) == 0:
print(0)
exit(0)
tmp_num = 0
isMinus = False
for i in range(len(digits)):
if i == 0:
answer+= digits[i]
continue
if isMinus:
if operations[i-1] == '+':
tmp_num += digits[i]
else:
answer -= tmp_num
answer -= digits[i]
isMinus = False
else:
if operations[i-1] == '+':
answer += digits[i]
else:
isMinus = True
tmp_num += digits[i]
if tmp_num:
answer -= tmp_num
print(answer)
정말 코드가 난장판이다.
그냥 생각나는대로 코딩해본건데 나 역시 짜면서 이런 난잡한 코드가 답일 리가 없다라는 생각이 들었다.
생각한 답은 잘 출력되었지만 왜인지 백준에 제출하면 실패가 떴다.
이유를 알 수 없어 답안지를 보았다.
arr = input().split('-')
s = 0
for i in arr[0].split('+'):
s += int(i)
for i in arr[1:]:
for j in i.split('+'):
s -= int(j)
print(s)
나는 코딩테스트 문제를 풀 때 정말 직관적으로 생각해보고, 답이 도출되는 과정을 작성해본 후 그것을 곧이곧대로 구현하곤 한다.
이 방식이 완전 잘못된 건 아닌 것 같지만 때론 이 문제의 정답과 같이 창의적으로 생각할 필요도 있을 것 같다.
특히, 내가 생각한 과정이 Python에서 구구절절 길어진다면 과감하게 다시 생각해볼 필요가 있을 것같다. 코딩테스트 문제는 핵심 아이디어를 캐치하면 코드를 간단하게 도출할 수 있다는 말을 어디선가 본 것 같다.