<로직 고민>
- 일단..문자열로 된 수식을 어떻게 계산하느냐..
- 구글링 ㄱㄱ
- 참고블로그: 파이썬으로 문자열로된 식을 계산하기(eval 함수) (tistory.com)
- 바로 나왔다 eval()이라는 함수가 있다
- 이 문제는 =을 기준으로 수식과 답이 써있으니까 split을 쓰면 되는 걸까..?
def solution(quiz):
answer = []
for q in quiz:
cal = q.split("=")
formulra = cal[0].rstrip()
result = cal[1].lstrip()
formula_result = eval(formulra)
if result == formula_result:
answer.append("O")
else:
answer.append("X")
return answer
- 이렇게 코드를 짰는데 정답이 안 나왔다
- 다 X표시...
- if문 아래에 print문을 찍어서 if문이 통과하는지 봤는데 하나도 통과를 안 한다
- 음....뭐가 문제일까......하다가 eval()은 계산을 하니까 그 값이 int인데 배열에서 빼낸 답은 문자열이라는 걸 깨달았다
- result에 int를 씌우거나 formula_result에 str을 씌우면 되는 문제였다..!
- 그리고 이것저것 만져보다 알게 되었는데 eval() 함수는 공백 상관없이 동작하는 것 같다
- formula에 cal[0] 뒤에 rstrip()을 뺐는데도 정답이 나온다
- 그리고 사실 strip() 함수는 쓸 필요도 없었다
def solution(quiz):
...
cal = q.split("=")
formula_result = eval(cal[0])
if int(cal[1]) == formula_result:
...
- 이렇게 정답의 기준이 되는 =의 오른쪽 부분에 공백이 있든 없든 int형으로 변환해주면 값이 정수가 돼서 공백은 아무런 상관이 없어진다
<완성된 코드>
def solution(quiz):
answer = []
for q in quiz:
cal = q.split("=")
formula_result = eval(cal[0])
if int(cal[1]) == formula_result:
answer.append("O")
else:
answer.append("X")
return answer
print(solution(["3 - 4 = -3", "5 + 6 = 11"]))
# ['X', 'O']
print(solution(["19 - 6 = 13", "5 + 66 = 71", "5 - 15 = 63", "3 - 1 = 2"]))
# ['O', 'O', 'X', 'O']
<다른 사람 풀이>
- 천재풀이1
def valid(equation):
equation = equation.replace('=', '==')
return eval(equation)
def solution(equations):
return ["O" if valid(equation) else "X" for equation in equations]
- 와..다른 함수를 같이 써서 활용하니까 뭔가 있어보인다
- eval() 함수에 답까지 같이 넣는 게 되는구나..!!
- 식이 맞으면 True, 틀리면 False를 반환하는군
- 천재풀이2
def solution(quiz):
answer = []
for q in quiz:
L,R = q.split(' = ')
a,op,b = L.split()
if op=='+':
result = 'O' if int(a)+int(b)==int(R) else 'X'
answer.append(result)
else:
result = 'O' if int(a)-int(b)==int(R) else 'X'
answer.append(result)
return answer
- 이 사람은 eval() 함수를 쓰지 않고 답을 찾아냈다
- 저렇게 변수를 여러 개 선언해서 스플릿으로 나눠지는 문자열을 각 변수에 넣는 게 가능하구나 또 알아간다..
- 나도 eval() 함수 몰랐으면 이런 식으로 풀었을 것 같다
- 머리에 지식이 쌓이면서 는 건 꼼수인건가....
- 다음 알고리즘 문제는 구글링 없이 풀어보자....!
- 함수를 모르면 모르는대로 노가다라도,,,,,,
- 천재풀이3
def solution(quiz):
answer = []
for q in quiz:
p, a = q.split("=")
if eval(p) == int(a):
answer.append("O")
else:
answer.append("X")
return answer
- 이 사람은 나랑 풀이법이 비슷한데 스플릿을 이용해서 =을 기준으로 나눈 두 값을 한 번에 변수에 지정해줘서 뭔가 더 깔끔해보인다
- 나는 인덱스 써서 하나 지정하고 또 하나 지정하고...꾸질꾸질 하넹..ㅋㅋ