본문 바로가기
알고리즘/프로그래머스

[프로그래머스] 튜플 (python)

by 김홍중 2021. 7. 2.

1. 문제

문제링크

 

코딩테스트 연습 - 튜플

"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]

programmers.co.kr

 

2. 설명

 

 

3. 풀이 및 코드

 

처음에는 아래와 같이 구현하였습니다.

그러나 다 완성하고 보니 정렬하는 부분의 위의 코드를 다 지워버리고 싶었습니다.

def solution(input_set):
    answer = []
    set_list = list(input_set)

    isNum = False
    replaced_input_set = ""
    input_set_list = []
    arr = []
    standard = 0

    input_set = input_set[1:]
    input_set = input_set[:-1]
    replaced_input_set = input_set
    
    num = ""
    for element in replaced_input_set:
        if element.isnumeric():
            isNum = True
        else:
            isNum = False
        if isNum:
            num += element
        if element == "," and num != "":
            arr.append(int(num))
            num = ""
        elif element == "}":
            arr.append(int(num))
            num = ""
            input_set_list.append(arr)
            arr = []
            
    input_set_list.sort(key=len) 

    res = set()
    res_list = []
    for set_list in input_set_list:
        for element in set_list:
            if element not in res_list:
                res_list.append(element)

    return res_list

그래서 더 단순하게 리팩토링을 진행하였습니다.

 

1. ","와 숫자형태의 문자들이 남아있도록 합니다.

2. ","도 제거합니다.

3. 배열의 길이에 따라 정렬합니다.

4. 차례로 순회하면서 튜플을 설정합니다.

def set_tuples(tuples, sorted_strings):
    for string in sorted_strings:
        for num_str in string:
            num = int(num_str)
            if num not in tuples:
                tuples.append(num)

def solution(tuple_set):
    tuples = []

    string_n_commas = tuple_set[2:-2].split("},{")

    strings = [string_n_comma.split(",") for string_n_comma in string_n_commas]

    sorted_strings = sorted(strings, key = lambda x : len(x))
                
    set_tuples(tuples, sorted_strings)
      
    return tuples

댓글