1. 문제 설명

셀 수 있는 수량의 순서있는 열거 또는 어떤 순서를 따르는 요소들의 모음을 튜플 (tuple)이라고 한다. n개의 요소를 가진 튜플을 n-tuple이라고 한다.

 

튜플은 다음과 같은 성질을 가지고 있다.

- 중복된 원소가 있을 수 있다. (예. (2, 3, 1, 2))

- 원소에 정해진 순서가 있으며, 원소의 순서가 다르면 서로 다른 튜플이다. (예. (1, 2, 3) ≠ (1, 3, 2))

- 튜플의 원소 개수는 유한하다.

 

(a1, a2, a3, ..., an)이 주어질 때, 집합 기호를 통해 다음과 같이 나타낼 수 있다.

- {{a1}, {a1, a2}, {a1, a2, a3}, {a1, a2, a3, a4}, ... {a1, a2, a3, a4, ... , an}

 

예를 들어 튜플이 (2, 1, 3, 4)인 경우 이는

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

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

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

이렇게 다양하게 표현이 가능하다.

 

특정 튜플을 표현하는 집합이 담긴 문자열 s가 매개변수로 주어질 때, s가 표현하는 튜플을 배열에 담아 반환하도록 하라.

 

 

2. 제한 사항

- s의 길이는 5 이상 1,000,000 이하이다.

- s는 숫자와 '{', '}', ','로만 이루어져 있다.

- 숫자가 0으로 시작하는 경우는 없다.

 

 

3. 코드

def solution(s):
    s1 = s.lstrip('}').rstrip('{').split('},{')
    s2 = []
    
    # 각 원소로 이루어진 배열을 삽입
    for i in s1:
        if '{{' in i:
            i = i.lstrip('{{')
        if '}}' in i:
            i = i.rstrip('}}')
            
        s2.append(i.split(','))
    
    # 원소의 길이를 기준으로 배열 정렬
    s3 = []
    for tuple in sorted(s2, key=len):
        for t in tuple:
        	
            # 배열에 존재하지 않는 경우 순서대로 추가
            if t not in s3:
                s3.append(t)
    
    return list(map(int, s3))

 

 

4. 해설

집합 형태의 s가 문자열로 들어왔고, 이를 원소 하나하나씩 떼어주는 작업이 필요하다.

- 문자열 맨 앞의 { 와 맨 뒤의 }를 제거해준다.

(예시 결과 : {2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4})

 

- '},{'를 기준으로 split 해준다.

(예시 결과 : ['{{2', '2, 1', '2, 1, 3', '2, 1, 3, 4}}'])

 

 

떼어낸 문자열을 원소 하나씩으로 분리해준다.

- 원소에 {{ 가 있거나 }} 가 있는 경우, 제거해준다.

(예시 결과 : ['2', '2, 1', '2, 1, 3', '2, 1, 3, 4']

 

- ','를 기준으로 split 해준다.

(예시 결과 : [['2'], ['2', '1'], ['2', '1', '3'], ['2', '1', '3', '4']]

 

 

각 배열 요소들을 짧은 길이 순서대로 sorting 해주고, 정답 배열에 존재하지 않는 경우에 원소를 추가한다.

- sorted(s2, key=len) : key에 정렬 기준 함수를 적어주면 되는데, python 내장 함수인 len을 적어주었다.

+ Recent posts