[Algorithm🧬] 튜플

또상·2021년 12월 26일
0

Algorithm

목록 보기
21/133
post-thumbnail

문제 / 풀이.py

import re
def solution(s):
    arr = []
    arr2 = []
    answer = []
    
    # 맨 앞이랑 맨 뒤 {} 제거
    s = s[1:-1]
    
    # }, 로 나눠서 각 집합 기호를 하나씩 나눈다.
    # { } 를 제거하여 2 2,1 2,1,3 형식의 문자열을 arr에 넣음.
    for element in s.split('},'):
        nums = re.sub('{', '', element)
        nums = re.sub('}', '', nums)
        arr.append(nums)
    
    # 문자열 길이대로 정렬.
    # 긴 것에서 순서가 바뀌어도 되는 것을 고려해야하기 때문.
    arr = sorted(arr, key=lambda x:len(x))

    # ,로 split 해서 숫자로 바꾸고 arr2에 넣음.
    # 각 집합 원소가 한 행에 들어가는 2차원 배열이 됨.
    for x in arr:
        arr2.append(list(map(int, x.split(','))))
    
    # 해당 배열을 돌면서
    # 작은 것부터 배열에 넣는다.
    # 이미 있는 것은 넣지 않아도 됨.
    for i in range(len(arr2)):
        for y in arr2[i]:
            if not (y in answer):
                answer.append(y)
    
    return answer

여기서 더 줄일 수 있는 방법이 있을까 했는데,

처음에 {}를 한겹 벗긴 후, split을 }, 기준으로 했는데,
{}를 두겹 벗긴 후 },{ 기준으로 하면 정규표현식을 사용할 필요가 없다!!

sorted 대신 arr.sort(key = len) 을 사용할 수 있다는 점도 알아둬야한다.

Counter 모듈을 사용해서 가장 많이 등장한 것부터 넣는 2줄짜리 아주 아름다운 풀이도 있었는데 그걸 처음부터 사용하려면.. 두달은 더 연습해야할 것 같다.


0222 2회차 풀이

import re
def solution(s):
    new = []
    answer = []
    
    s = s[2:-2]
    s = s.split('},{')
    
    for element in s:
        new.append(element.split(','))
    
    new = sorted(new, key=lambda x: len(x))
    
    for arr in new:
        for num in arr:
            if not (num in answer):
                answer.append(num)
                
    answer = [int(num) for num in answer]
    
    return answer

다른건 모르겟고 },{ 으로 쪼개는게 상당히 기억에 남았어서 풀어냈다. 역시 sorted 가 기억 안났음.. sorted(배열, key=클로저) 외우자...

profile
0년차 iOS 개발자입니다.

0개의 댓글