프로그래머스에 0단계 문제가 생겼다!
그래서 이번주 스터디에서는 정답률이 낮은 두 문제를 풀었다😙
def solution(quiz):
answer = []
# [연산자]는 + 와 - 중 하나입니다.
for q in quiz:
left, right = q.split('=')
left = left.split()
print(left)
if left[1] == '+': # 더하기 연산
if int(left[0]) + int(left[2]) == int(right):
answer.append('O')
else:
answer.append('X')
elif left[1] == '-': # 빼기 연산
if int(left[0]) - int(left[2]) == int(right):
answer.append('O')
else:
answer.append('X')
return answer
split()
을 사용하여 문자열을 나눠주고, 이를 int
로 변환시켜 계산할 수 있는지의 여부를 물어보는 문제인 것 같았다.'='
을 기준으로 좌항, 우항을 나눠준 후에 left
는 공백을 기준으로 나눠준다.answer
에 'O'
를 담아주고, 아니라면 'X'
를 담아준다.def valid(equation):
equation = equation.replace('=', '==')
return eval(equation)
def solution(equations):
return ["O" if valid(equation) else "X" for equation in equations]
eval
함수eval(expression)
형태로 사용하며, 매개변수로 받은 expression(식)을 문자열로 받아서 실행하는 함수이다.
비교연산자를 넣어도 가능하고, 간단한 덧셈도 가능하고, 1 그자체도 식이다.
위의 코드에서 valid('5+3=9')
를 실행할 경우 False
를 반환한다.
이를 이용하면 쉽게 True
와 False
를 구할 수 있어 코드가 훨씬 더 간결해진다.
def solution(babbling):
answer = 0
word = ['aya', 'ye', 'woo', 'ma']
for b in babbling:
for w in word:
if w*2 not in b: # 중복되는 것이 없고
if w in b: # w가 b에 있다면
b = b.replace(w, '') # 공백으로 치환한다
if len(b) == 0: # 그 값의 길이가 0이면
answer += 1 # 조카가 말할 수 있는 것
return answer
할 수 있는 옹알이의 수
를 구하는 문제이므로 제일 상단 조건문에 반복하는 옹알이가 아닐 경우, 그 옹알이에 w
가 있다면 이를 공백으로 치환하고, 그 길이가 0이라면 조카가 말할 수 있다는 것이니까 answer += 1
을 해준다.Lv.0 문제도 생각보다는 만만치 않다는 것? 하지만 그냥 뭘 이용하는지만 알면 금방 푸는 문제였다.