https://programmers.co.kr/learn/courses/30/lessons/64065 ref: https://hazung.tistory.com/103

풀이

import re

def solution(s):
    answer = []
    s = s.split('},{')
    s = [re.sub('[{}]', '', c) for c in s]
    s = [list(map(int, c.split(','))) for c in s]
    s = list(sorted(s, key = len))

    for i in range(len(s)):
        target = s[i][0]
        answer.append(target)
        for j in range(i, len(s)):
            del s[j][s[j].index(target)]
    return answer
    

내가 푼 방식. 머릿 속에 떠오른 방법을 그대로 구현한거라 비효율적이다.

풀이 2

def solution(s):
    answer = []
    s = s[2:-2]
    s = s.split("},{")
    s.sort(key = len)
    for i in s:
        ii = i.split(',')
        for j in ii:
            if int(j) not in answer:
                answer.append(int(j))
    return answer
  • 앞뒤로 규칙적이지 않았던 문자들을 제거해주면 split 결과 자체를 그대로 사용할 수 있다.
  • 굳이 숫자로 변환할 필요가 없으니 문자를 그대로 사용. 나중에만 숫자로 변환
  • 길이가 작은 s의 요소들 부터 가져온다. 따라서 s의 첫번째 요소부터 가져와서 answer에 없다면 추가해주는 것만으로도 문제에서 정의한 ‘튜플’의 정의를 충족시킬 수 있다.

풀이 3

import re
 
def solution(s):
    answer = []
    a = s.split(',{')
    a.sort(key = len)
    for j in a:
        numbers = re.findall("\d+", j)
        for k in numbers:
            if int(k) not in answer:
                answer.append(int(k))
    return answer

알고리즘은 풀이 2와 같다. 다른 점은 정규표현식을 사용해서 s의 요소별로 리스트를 만드는 것이다. 해당 정규식을 사용하면 하나 이상의 숫자를 찾을 때마다 리스트에 넣어준 후 반환해준다.

Leave a comment