몸과 마음이 건전한 SW 개발자

프로그래머스 Lv2 튜플 Python 본문

알고리즘

프로그래머스 Lv2 튜플 Python

스위태니 2023. 12. 11. 00:34

문제 링크

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

 

프로그래머스

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

programmers.co.kr

정답 코드

def solution(s):
    lenS = len(s)
    answer = []
    result = []
    newList = []
    newNumber = ""
    for idx in range(lenS-1):
        str = s[idx]
        if str == "{":
            newList = []
        elif str.isdigit():
            newNumber += str
        elif str == "}":
            if newNumber:
                newList.append(int(newNumber))
            if newList:
                result.append(newList)
            newNumber = ""
        else:
            if newNumber:
                newList.append(int(newNumber))
            newNumber = ""
    sortedR = sorted(result, key=lambda x: len(x))
    final = []
    for lst in sortedR:
        for num in lst:
            if num in final:
                continue
            final.append(num)
    answer = final
    return answer

풀이 방법

- 여는 괄호가 나오면 리스트를 초기화

- 숫자가 나오면 문자열을 더해주고

- 닫는 괄호가 나오면 newNumber를 리스트에 넣는다.

- 리스트가 존재하면 다시 결과 리스트에 넣는다.

- 람다식을 이용해 길이에 따라 오름차순으로 정렬한다.

- 결과 리스트를 전부 순회하면서 없으면 마지막 리스트에 넣고

- 있으면 지나간다.

느낀점

- 10월에 풀었는데 기억은 잘 안난다.

- 우선 "{"이 중괄호가 굉장히 귀찮게 굴었던 문제다.