[프로그래머스] 튜플

Min-Jae Song·2021년 9월 19일
0

코테

목록 보기
10/10

링크 : 프로그래머스 - 튜플

def solution(s):
    #input to list
    stack = []
    s = s[1:-1].split('}')
    stack = [num[2:] for num in s[1:]][:-1]
    stack.append(s[0][1:])
    
    #Counting
    for nums in stack:
        list_num = nums.split(',')
        for num in list_num:
            if num not in counter:
                counter[num] = 1
            else:
                counter[num] += 1
    #Sorting
    dict_key = sorted(counter.items(),
           key=lambda item:item[1],
           reverse=True)
   
    answer = [int(num[0]) for num in dict_key]
    
    return answer

이 문제에서 헷갈렸던 부분은 예시인데
튜플이 (2, 1, 3, 4)인 경우

  • {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}
  • {{2, 1, 3, 4}, {2}, {2, 1, 3}, {2, 1}}
  • {{1, 2, 3}, {2, 1}, {1, 2, 4, 3}, {2}}

마지막 {{1, 2, 3}, {2, 1}, {1, 2, 4, 3}, {2}} 부분에서 왜 순서가 바뀌었나 싶었는데 사실 그게 중요한게 아니였다.

이 문제의 핵심은 튜플 수가 하나 둘 셋 넷 이렇게 늘면서
가장 많이 중복된 순서대로 결과물이 나온다는 점이다.

주로 프로그래머스를 이용하다 보니까 input에는 딱히 신경을 안써서 더 좋은 코드를 쓸 수가 없었는데

new_s = [sss.replace('{','').replace('}','') for sss in s.split(',')]

파싱을 이렇게 하는 방법도 있다.

s1 = s.lstrip('{').rstrip('}').split('},{')

strip함수는 문자열 전체를 다 지우는 replace와 다르게
양쪽에서 strip()을 이용해 공백을 지우거나 strip('x')를 이용해 모든 가능한 조합의 문자를 지운다.

다음에 유용하게 쓰일 것 같다.

profile
개발세발스토오리

0개의 댓글