문제
https://programmers.co.kr/learn/courses/30/lessons/64065?language=python3
풀이
- 정규표현식으로 },{ 이랑 , 를 제거한다.
- 해시테이블로 각 숫자의 개수를 체크해낸다.
- 해시테이블의 내림차순으로 반환한다.
import re
def solution(s):
news = re.sub('[{}]', '', ",".join(s[1:-1].split('},{'))).split(',')
tuples = {}
for n in news:
if int(n) in tuples: tuples[int(n)] += 1
else: tuples[int(n)] = 1
return [key for key, val in sorted(tuples.items(), key=lambda x: x[1], reverse=True)]
더 나은 풀이
import re
from collections import Counter
def solution(s):
s = Counter(re.findall('\d+', s))
return list(map(int, [k for k, v in sorted(s.items(), key=lambda x: x[1], reverse=True)]))
정규표현식이 훨씬 깔끔했고,
Counter 함수로 원소 개수가 많은 순서대로 정렬해서 반환했다.
정규표현식을 더 연습하자!
댓글남기기