[프로그래머스] 튜플

Tae-Kyun Kim·2022년 4월 24일
1

https://programmers.co.kr/learn/courses/30/lessons/64065

나의 풀이

from collections import defaultdict

def solution(s):
    answer = list()
    set_map = defaultdict(set)
    sets = s.split('}')[:-2]
    for s in sets:
        new_set = set()
        new_num = ''
        for l in s:
            if l.isnumeric():
                new_num += l
            elif new_num:
                new_set.add(int(new_num))
                new_num = ''
        if new_num:
            new_set.add(int(new_num))
        set_map[len(new_set)] = new_set
    for i in range(1, len(set_map) + 1):
        answer.append((set_map[i] - set_map[i - 1]).pop())
    return answer
  • 주어진 입력값을 나누어진 집합으로 받는데에 어려움이 있었다.

참고 코드1

def solution(s):
    answer = []
    
    list_ = s[2:-2].split('},{')
    
    for i,j in enumerate(list_):
        list_[i] = j.split(',')
        list_[i] = set(list_[i])
        
    list_.sort(key=len)

    for i in range(len(list_)-1):
        for j in range(i+1):
            list_[i+1] = list_[i+1] - list_[j]    
    
    for i in range(len(list_)):
        a = list(list_[i])
        answer.append(int(a[0]))
        
    return answer
  • split('},{') 를 사용하여 괄호 벗겨줌
  • sort(key=len) 으로 key 함수를 주어 정렬

참고 코드2

import re
import heapq as hq

def solution(s):
    answer = []
    setlist = []
    numset = set()
    for i in re.findall('{[\d,]*}',s):
        x=eval(i)
        hq.heappush(setlist,(len(x), x))
    
    while setlist:
        count, nowset = hq.heappop(setlist)
        nownum = (nowset - numset).pop()
        numset.add(nownum)
        answer.append(nownum)
    
    return answer
  • 정규표현식의 사용
  • eval 함수로 문자열 형태에서 집합으로 변환해줌
  • 힙 자료형을 사용하여 길이에 따라 정렬

참고 코드 3

import re
from collections import Counter

def solution(s):
    s = Counter(re.findall('\d+', s))
    return list(map(lambda x: int(x[0]), s.most_common()))
  • 문제의 특성상 작은 집합들은 가장 큰 집합의 부분집합이기 때문에 Counter와 정규표현식을 사용하여 가장 많이 등장한 단어 순으로 세어줌

0개의 댓글