Algorithm/Programmers

[Programmers] 369게임 (str.count(),lambda,filter,정규표현식 사용한 풀이)

juyeong 2023. 2. 1. 17:45
반응형
import re

def solution1(order):
    '''
    source: https://school.programmers.co.kr/learn/courses/30/lessons/120891
    idea:
    1. count() 를 이용하여 풀기 (solution1)
    2. lambda() 사용 (solution2)
    3. filter() 사용 (solution3)
    4. 정규표현식의 findall() 사용 (solution4)
    '''
    answer = 0
    order = str(order)
    answer += order.count('3')
    answer += order.count('6')
    answer += order.count('9')
    return answer


def solution2(order):
    order = str(order)
    return sum(map((lambda x: order.count(x), '369')))


def solution3(order):
    order = str(order)
    return len(list(filter(lambda x: x in '369', order))) 


def solution4(order):
    order = str(order)
    return len(re.findall('[369]', order))

숫자 order 가 매개변수로 주어질 때, 369게임에 맞춰 리턴해야하는 박수의 수를 구하는 문제이다.

solution1: str.count()를 사용하여 간단하게 풀이. 근데 저 answer를 + 로 연결해서 한줄로 끝내는게 더 깔끔했을 것 같다

solution2: 람다를 사용한다. 3,6,9를 순회한 뒤 리턴값을 sum함수를 이용하여 총합을 구한다.

solution3: filter를 사용한다. filter는 매개변수를 2개 갖는다. filter(args1: 거르는 기준이 되는 함수 , args2: 걸러질 리스트) 라고 생각하면 된다.

solution4: 정규표현식을 사용한다. (import re) 

findall 의 결과는 리스트로 반환되고 이 리스트의 길이를 리턴한다. 

간단한 문제인데 풀이방법이 다양했다. 그리고 파이썬의 람다, 맵, 정규표현식 같은 함수를 사용하는 것이 미숙해서 시간이 좀 소요됐다. 나중에 또 복습해야지~ 

반응형