이숭간 공부기록

[프로그래머스] 파이썬 _ 튜플 (2019 KAKAO INTERN) 본문

알고리즘/프로그래머스

[프로그래머스] 파이썬 _ 튜플 (2019 KAKAO INTERN)

이숭간 2021. 6. 30. 16:45
728x90

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

 

문제유형 : 튜플, 문자열, 구현

 

문제풀이 :

 

  • 주어진 문자열을 먼저 다룰수있는 리스트로 만든다.
    • 나는 이부분을 좀 복잡하게 해결했는데 엄청 간단히 하신분이 있었다.
    • s1 = s.lstrip('{').rstrip('}').split('},{')
      
      new_s = []
          for i in s1:
              new_s.append(i.split(','))
    • split('},{') 부분이 신박하군 
  • 위 리스트를 원소길이로 정렬한다
  • 길이가 짧은순으로 정렬하고 차례로 정답에 추가하는데, 정답에 이미 있는 원소면 건너뛰는식으로 하면 된다.

 

정답코드 :

def solution(s):
    answer = []
    s = s[1:-1]

    stack = []
    one_int = ''
    temp = []
    
    for i in s: # {20,111},{111}
        if i =='{':
            continue
        elif i == '}':
            if one_int:
                temp.append(int(one_int))
                one_int = ''
            stack.append(temp)
            temp = []
            continue
        elif i == ',':
            if not one_int:
                continue
            temp.append(int(one_int))
            one_int = ''
            continue
        one_int += i
    
    stack = sorted(stack, key=lambda x:len(x))
    
    for i in stack:
        for j in i:
            if j not in answer:
                answer.append(j)
    
    return answer