문제

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 함수로 원소 개수가 많은 순서대로 정렬해서 반환했다.
정규표현식을 더 연습하자!

댓글남기기