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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


풀이 과정

튜플을 표현하는 집합을 문자열로 받아서 튜플을 출력하는 문제이다.

 

튜플은 순서가 다르면 원소가 같더라도 다른 튜플이지만, 집합은 순서가 달라도 같은 집합이다. 한 튜플을 표현하는 집합은 다양한 순서로 입력받을 수 있는데 어떻게 하나의 튜플을 식별이 가능한가?

 

어떤 순서로 들어와도 동일하게 처리하기 위해서 집합을 길이가 짧은 순서대로 오름차순 정렬을 해버리면 된다.

 

{1, 2, 3}, {2, 1}, {1, 2, 4, 3}, {2}가 어떤 튜플을 가리키는지 알기 위해서는 길이 순서대로 정렬을 하면,

{2}, {2, 1}, {1, 2, 3}, {1, 2, 4, 3}이 되는데 숫자가 추가된 순서대로 튜플에 원소를 넣어주면 집합이 어떤 튜플을 표현하는지 쉽게 알 수 있다. 앞에 표현한 집합은 (2, 1, 3, 4) 튜플을 표현함을 알 수 있다.

 

문자열로 들어온 집합을 어떻게 처리할지는 정답이 없지만 [[1, 2, 3], [2, 1], [1, 2, 4, 3], [2]]와 같은 2차원 리스트로 받은 후 길이 순으로 정렬해서 문제를 해결하게끔 구현하였다.


소스 코드

def solution(s):
    answer = []
    temp = [[]]
    temp_num = 0

    for index in range(len(s)-1):
        if s[index].isnumeric():
            temp_num *= 10
            temp_num += int(s[index])
        elif s[index] == ',':
            if s[index-1] == '}' and s[index+1] == '{':
                continue
            temp[-1].append(temp_num)
            temp_num = 0
        elif s[index] == '}':
            temp[-1].append(temp_num)
            temp_num = 0
            temp.append([])

    del temp[-1]
    temp.sort(key=len)

    for i in temp:
        for j in i:
            if j not in answer:
                answer.append(j)
    return answer

+ Recent posts