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)인 경우
마지막 {{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')를 이용해 모든 가능한 조합의 문자를 지운다.
다음에 유용하게 쓰일 것 같다.