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 |