[프로그래머스(파이썬/Python)] 튜플 - 문자열 처리

kindof

·

2021. 8. 23. 00:43

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

 

코딩테스트 연습 - 튜플

"{{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

 

처음에 주어진 문자열 s를 리스트로 바꿔서 처리하기 위해 크게 1) 여는 대괄호, 2) 쉼표, 3) 닫는 대괄호, 4) 숫자일 때로 조건을 나누어 처리했습니다.

 

위 과정을 통해 주어진 문자열 s를 리스트 형태로 바꾸고 나면, 해당 이차원 리스트를 길이 순으로 정렬하고 길이가 짧은 리스트의 앞에서부터 결과 리스트에 없는 값을 추가해나가면 끝나게 됩니다.

 

그런데 다른 사람들의 풀이를 보니 eval 함수 쓰신 분도 계시고, 적절하게 슬라이싱을 한 후 "{,}"을 기준으로 split 처리를 한 풀이가 더 좋아보이기도 합니다. 참고하면 좋을 것 같습니다.

 

[풀이]

def tupleStringToList(s):
    tuple_list = []
    for i in range(1, len(s)-1):
        if s[i] == "{":
            # 하나의 리스트가 생성되고, 숫자 초기화
            integer = ""
            tuple2list = []
        elif s[i] == ",":
            # 튜플 사이의 쉼표가 아닐 때 숫자 초기화하고 리스트에 추가
            if s[i-1] != "}":   
                tuple2list.append(int(integer))
                integer = ""
        elif s[i] == "}":
            # 하나의 리스트가 끝나면 해당 리스트를 전체 튜플 리스트에 추가
            tuple2list.append(int(integer))
            tuple_list.append(tuple2list)
        else:
            integer += s[i]

    return tuple_list


def solution(s):
    answer = []

    # 튜플을 리스트 형태로 바꾼다.
    tuple_list = tupleStringToList(s)
    tuple_list.sort(key = lambda x : len(x))

    for lst in tuple_list:
        for number in lst:
            if number not in answer:
                answer.append(number)
    return answer