코딩테스트/PYTHON

[프로그래머스][PYTHON] Lv. 0 문자열 계산하기

_알파카 2024. 3. 6. 23:46
728x90

문제 설명

https://school.programmers.co.kr/learn/courses/30/lessons/120902

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내 풀이

[풀이 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