꼬꼬마 블로그

꼬꼬마의 기술 블로그

문제 설명

프로그래머스 레벨 2의 문제입니다.

2019 카카오 개발자 겨울 인턴쉽에 출제된 문제입니다. 이름은 튜플이지만 주로 문자열을 다루는 문제입니다.

간단히 string 형태의 집합이 주어졌을때 이를 순서를 가지는 튜플로 만드는 것입니다.

 

입출력 예를 보면 쉽게 이해할 수 있습니다.

{ 2 }, { 2, 1 }, { 2, 1, 3 }, { 2, 1, 3, 4 }

는 결국 { 2, 1, 3 , 4 } 가 마지막 튜플이 됩니다. 위와 같이 가장 길이가 긴 집합이 될거라고 생각할 수 도있지만

{ 1, 2, 3 }, { 2, 1 }, { 1, 2, 4, 3 }, { 2 } 와 같이 집합은 순서가 제각각입니다.

풀이

def solution(s: str):
    s = s[1:][:-2]
    s = s.replace('{', '')

    arr = s.split('},')

    for i in range(len(arr)):
        arr[i] = arr[i].split(',')
        for j in range(len(arr[i])):
            arr[i][j] = int(arr[i][j])

    arr.sort(key=lambda x: len(x))

    tup = []
    for item in arr:
        new_item = set(item) - set(tup)
        tup.extend(new_item)

    return tup

변수 설명

s: 입력받은 문자열 입니다.

arr: 문자열을 이차원 배열로 수정한 값입니다

tup: 순서를 가진 튜플입니다

간단 설명

문자열을 아래와 같은 형식으로 변경하여 arr안에 넣었습니다.
['2', '2,1', '2,1,3', '2,1,3,4']

그 후 arr의 값을 아래와 같이 int형 이중 리스트로 만들어 주기 위해 중첩 for문을 사용했습니다.
[[2], [2, 1], [2, 1, 3], [2, 1, 3, 4]]

배열의 길이에 따라 오름차순으로 정렬 후 배열을 돌며 현재 튜플과 각 배열의 차집합(순서대로 정렬했기 때문에 차집합은 하나가 나옵니다)만큼 튜플에 추가해줍니다.