[알고리즘] 프로그래머스 2단계 튜플

minidoo·2020년 10월 26일
0

알고리즘

목록 보기
50/85
post-thumbnail
def solution(s):
    
    s = list(s[1:len(s)-1])
    stack1 = []
    stack2 = []
    stack3 = []
    
    for i in s:
        if i != '{' and i != '}' and i != ',':
            stack1.append(i)
        elif i == ',' and stack1 != []:
            stack2.append(stack1)
            stack1 = []
        elif i == '}':
            if stack1 != []:
                stack2.append(stack1)
                stack1 = []
            stack3.append(stack2)
            stack2 = []
    
    answer = []
    for i in stack3:
        change = [''.join(j) for j in i]
        answer.append(list(map(int, change)))
    
    answer.sort(key=lambda x:len(x))
    
    result = []
    for i in answer:
        for j in i:
            if j not in result:
                result.append(j)
    
    return result

입출력 예

풀이과정

주의해야 할 점

  • 주어진 s는 문자열이다.
  • 문자열이기 때문에 20은 숫자 20이 아닌 문자 2와 0이다.
  1. {{20,111},{111}}를 예로 들어보자.
  2. s에 맨 앞의 '{'와 맨 뒤의 '}'를 제외한 {20,111},{111}를 넣는다.
  3. 문자열 반복문을 돌면서 숫자 형태의 문자열은 stack1에 넣는다. stack1에는 [ '2', '0' ] 이 들어 있다.
  4. ','가 나오면 stack1 배열을 stack2에 넣는다.
  5. '}'가 나오면 stack2를 stack3에 넣는다. stack3에는 [[['2', '0'], ['1', '1', '1']], [['1', '1', '1']]]가 담겨있다.
  6. 각 배열의 문자열을 join하고 answer에 넣는다. 이후 answer를 정렬한다. 그럼 정답 배열에 담길 순서가 정해진다.
  7. answer 배열을 돌면서 result에 있지 않은 값을 넣어준다. 예를 들어 answer = [[111], [20, 111]] 일 때, result에는 첫 번째로 111이 담긴다. 이후, 111은 이미 있기 때문에 20을 넣는다.

0개의 댓글