파이썬

re.compile

content0474 2024. 12. 4. 10:36

61. 로또1. 로또

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다.

로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다. 하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호를 알아볼 수 없게 되었습니다. 당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어 졌습니다.

  • 순서와 상관없이, 구매한 로또에 당첨 번호와 일치하는 번호가 있으면 맞힌 걸로 인정됩니다.

민우가 구매한 로또 번호를 담은 배열 lottos, 당첨 번호를 담은 배열 win_nums가 매개변수로 주어집니다. 이때, 당첨 가능한 최고 순위와 최저 순위를 차례대로 배열에 담아서 return 하도록 solution 함수를 완성해주세요.

 

def solution(lottos, win_nums):
    answer=[0,0]
    common_nums=list(set(lottos)&set(win_nums))
    answer[1]=7-len(common_nums)
    answer[0]=7-(len(common_nums)+lottos.count(0))
    answer=[6 if x==7 else x for x in answer]
    return answer

 

중요한 것은 빈 리스트에는 값을 추가할 수 없다는 점이다.

만약 answer=[] 로 만든 다음 answer[0]이나 answer[1]에 값을 넣으려고 하면 오류가 난다.

처음부터 answer=[0,0]으로 만들고 값을 대체하거나 append로 순차적으로 추가해야 한다.

 

62. 옹알이

머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

import re
def solution(babbling):
    pattern=re.compile(r'^(aya|ye|woo|ma)+$')
    exception=re.compile(r'(ayaaya|yeye|woowoo|mama)')
    count=0
    for bab in babbling:
        if pattern.match(bab) and not exception.search(bab):
            count+=1
    return count

re.compile을 이용하면 정규식 표현을 미리 컴파일해서 패턴객체를 만들 수 있다.

이렇게 만들어진 객체에는 match, sub, search를 쓸 수 있다.

r'^(aya|ye|woo|ma)+$' : aya 또는 ye 또는 woo 또는 ma + 뒤에 다른 문자열이 오는 패턴

r'(ayaaya|yeye|woowoo|mama)': 한 발음이 연속해서 두 번 나오는 패턴

전자와 일치하면서 후자와는 일치하지 않는 것을 찾으면 됨 

'파이썬' 카테고리의 다른 글

정규표현식  (0) 2024.12.05
enumerate, list comprehension  (1) 2024.12.03
heapq, deque  (0) 2024.12.02
CodeKata-3  (2) 2024.11.21
CodeKata-2  (2) 2024.11.15