728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/120902
내 풀이
[풀이 1]
def solution(my_string):
return eval(my_string)
[풀이 2]
def solution(my_string):
# 공백을 기준으로 문자열을 나눈다.
new_str = my_string.split(' ')
# 정확한 수식은 첫 번째로 연산자가 나오지 않으므로 기본 answer은 첫 번째 숫자로 지정한다.
answer = int(new_str[0])
for i in range(len(new_str)):
# + 연산자를 만나면, 지금까지의 answer과 연산자 바로 뒤에 올 값을 더한다.
if new_str[i] == "+":
answer = answer + int(new_str[i+1])
# - 연산자를 만나면, 지금까지의 answer과 연산자 바로 뒤에 올 값을 뺀다.
elif new_str[i] == "-":
answer = answer - int(new_str[i+1])
return answer
처음에는 간단하게 파이썬의 eval 내장함수를 통해 풀었는데, 사실 이 방법은 그리 추천하는 방법이 아니므로,
제대로 사용할 수 있는 알고리즘으로 다시 풀어보았다.
공백을 기준으로 연산자와 숫자가 구별된다는 제한사항에 따라 split을 통해 문자열을 구분하고, 연산자에 따라 빼거나 더하는 방법으로 풀어보았다!
다른 사람 풀이
def solution(my_string):
return sum(int(i) for i in my_string.replace(' - ', ' + -').split(' + '))
이 풀이는, 뺄셈을 더했다가 빼는 형태(결국 더했다가 빼도 똑같이 뺄셈임)로 바꾸고, + 연산자를 기준으로 나눈 후, 값을 더하는 방식을 택했다.
즉, 5 - 8 ==> 5 + - 8 이 된 셈이다!
따라서, "5 + - 8"을 + 연산자를 기준으로 나누면 5, -8이 되므로, 양수, 음수에 상관없이 모두 더하는 형태로 푼 것이다.
느낀점
뺄셈을 음수로 바꾸어 더한다는 개념이 새롭게 다가왔다.
내가 생각하지 못한 접근 방식이라 신선했다!
728x90
'코딩테스트 > PYTHON' 카테고리의 다른 글
[프로그래머스][PYTHON] Lv. 0 직사각형 넓이 구하기 (0) | 2024.03.11 |
---|---|
[프로그래머스][PYTHON] Lv. 0 OX퀴즈 (0) | 2024.03.08 |
[프로그래머스][PYTHON] Lv. 0 가까운 수 (0) | 2024.03.03 |
[프로그래머스][PYTHON] Lv. 0 소인수분해 (0) | 2024.03.02 |
[프로그래머스][PYTHON] Lv. 0 합성수 찾기 (0) | 2024.03.02 |