코딩테스트/PYTHON

[프로그래머스][PYTHON] Lv. 0 OX퀴즈

_알파카 2024. 3. 8. 23:18
728x90

문제 설명

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

 

프로그래머스

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

programmers.co.kr

 

내 풀이

처음에는 저번에 풀었던 방식을 참고하여 다음과 같이 풀어보았다.

[실패 코드]

# 수식이 옳은지 판단하는 함수
def exp(numbers):
    # "=" 연산자를 기준으로 식을 나눔
    expression = numbers.split(" = ")
    # ex. 3 - 4 ==> 3 + -4 와 같은 형태로 변경하여 합을 구하고, 그 값이 수식이랑 맞는지 확인
    if sum(int(i) for i in expression[0].replace(" - ", " + -").split("+")) == int(expression[-1]):
        return "O"
    else:
        return "X"
    
def solution(quiz):
    answer = []
    for i in quiz:
        # 수식을 계산하는 함수를 수식마다 적용하여 answer을 구함
        answer.append(exp(i))
    return answer

 

그러나, 이렇게 푸니 테스트 케이스는 모두 통과했지만 런타임 에러가 났다ㅠㅠ

 

이를 바탕으로 다른 방법으로 풀어보았다. 

[정답 코드]

# 수식이 옳은지 판단하는 함수
def exp(numbers):
    # 공백을 기준으로 식을 나눔
    expression = numbers.split(" ")
    # 주어진 수식은 일정한 형태를 보이므로, 연산자는 1번 인덱스에 위치하며, 계산할 값은 각각 0번, 2번 인덱스에 위치함. 
    if expression[1] == "+":
        tmp = int(expression[0]) + int(expression[2])
    else:
        tmp = int(expression[0]) - int(expression[2])
    
    # 계산한 수식 값이 결과값(수식의 마지막 값)과 일치하면 O, 불일치하면 X 반환
    if tmp == int(expression[-1]):
        return "O"
    else:
        return "X"
    
def solution(quiz):
    answer = []
    for i in quiz:
        # 수식을 계산하는 함수를 수식마다 적용하여 answer을 구함
        answer.append(exp(i))
    return answer

 

위의 방법보다 직관적인 방법으로 풀어보았는데 통과했다! 

 

다른 사람 풀이

다른 사람들은 eval 내장함수를 쓴 경우가 많은데, 

이는 좋지 않은 코드이므로, 생략한다! 

 

느낀점

처음에는 복잡한 방법으로 풀어봤는데, 꼭 어려운 풀이가 아니라 단순한 풀이가 오히려 답이 될 수 있음을 다시 한 번 깨닫는 문제였다. 

항상 제일 먼저 간단하게 생각해보도록 하자! 

728x90