code/[프로그래머스] python

[코딩 테스트 연습 입문] OX 퀴즈

오리는짹짹 2022. 12. 28. 17:12

문제

덧셈, 뺄셈 수식들이 'X [연산자] Y = Z' 형태로 들어있는 문자열 배열 quiz가 매개변수로 주어집니다. 수식이 옳다면 "O"를 틀리다면 "X"를 순서대로 담은 배열을 return하도록 solution 함수를 완성해주세요.

 

❗제한사항

  • 연산 기호와 숫자 사이는 항상 하나의 공백이 존재합니다. 단 음수를 표시하는 마이너스 기호와 숫자 사이에는 공백이 존재하지 않습니다.
  • 1 ≤ quiz의 길이 ≤ 10
  • X, Y, Z는 각각 0부터 9까지 숫자로 이루어진 정수를 의미하며, 각 숫자의 맨 앞에 마이너스 기호가 하나 있을 수 있고 이는 음수를 의미합니다.
  • X, Y, Z는 0을 제외하고는 0으로 시작하지 않습니다.
  • -10,000 ≤ X, Y ≤ 10,000
  • -20,000 ≤ Z ≤ 20,000
  • [연산자]는 + 와 - 중 하나입니다.

 

입출력 예

 

입출력 예 설명

입출력 예 #1

  • 3 - 4 = -3 은 틀린 수식이므로 "X", 5 + 6 = 11 은 옳은 수식이므로 "O" 입니다. 따라서 ["X", "O"]를 return합니다.

입출력 예 #2

  • 19 - 6 = 13 은 옳은 수식이므로 "O", 5 + 66 = 71 은 옳은 수식이므로 "O", 5 - 15 = 63 은 틀린 수식이므로 "X", 3 - 1 = 2는 옳은 수식이므로 "O" 따라서 ["O", "O", "X", "O"]를 return합니다.

 

✔풀이

def solution(quiz):
    answer = []
    
    for q in quiz:
        qList = q.split()
        calc = "".join(qList[0:3])
        if eval(calc) == int(qList[4]):
            answer.append("O")
        else:
            answer.append("X")
            
    return answer

📝설명

현재 주어지는 quiz는 여러개의 문자열로 구성된 리스트이다.

여기서 우리는 각 문자열 안에 있는 수식이 참인지 거짓인지를 판단하여 "O", "X"로 표기해야한다.

그래서 코딩을 구상할 때, 리스트의 각 문자열을 for문으로 부른 후, 그 문자열을 다시 리스트로 만들고, 수식 부분을 문자열로 엮어서 문장려에서 주어진 결과값과 실제 계산값을 비교해야겠다고 생각했다.

우선 for문으로 quiz 안의 문자열을 하나씩 부르고, 이를 잠시동안은 q라고 이름 붙였다.

이 q를 split를 이용하여 공백을 기준으로 하나하나를 리스트의 구성요소로 나누고, 그 리스트의 이름을 qList로 했다.

그렇게 되면 q가 "3 - 4 = 3"인 경우에, qList는 ["3", "-", "4", "=", "3"]이다.

여기서 계산해서 참 거짓을 판단해야 하는 부분을 "".join()을 이용하여 qList[0:3] 부분을 문자열로 변환시키고, calc에 저장한다.

eval()은 문자열 안에 있는 수식의 결과를 도출해낸다.

앞서 만든 문자열 calc를 eval함수에 적용하여 실제 계산값을 구하고, qList[4]에 있는 주어진 문자열에서의 결과값과 비교한다.

그 같이 일치하다면 리스트 answer에 "O"을 추가하고, 같지 않다면 리스트 answer에 "X"를 넣으면 된다. 

 

👑모범 답안

🔎굳이 리스트로 만들지 않고, 문자열 안에서 split("=")를 해서 더 빠르게 문제를 해결해냈다.

 

👀느낀 점

: 다른 사람들이 푼 것과 꽤나 유사하게 문제를 풀었다.

그보다도 뿌듯한건 바로 전에 코딩문제를 풀 때 알게 된 eval()을 사용했다는 것!!

문제를 글로 적으면서 솔직히 효율성이 떨어지는 활동을 하는 게 아닐까.. 라는 생각도 종종했는데, 그냥 계속 해야겠다.

그냥 보고 넘어갔더라면.. 해결하기 어려웠을수도 있으니까!