1. 입출력 예시인 s와 result의 연관 관계를 알아내야 한다.
ex)
s: "{{2},{2,1},{2,1,3},{2,1,3,4}}"
result: [2, 1, 3, 4]
※ 위의 숫자들은 총 2는 4개 1은 3개 3은 2개 4는 1개라는 결과에서 얻을 수 있는 것은 숫자의 갯수에 따른 내림차순이라는 것이다.2. 문자열의 튜플을 구분한다.
나는 deque와 defaultdict를 사용했다.
1. "{", "}", ","를 제외한 문자열 즉, 숫자가 올 경우 만들어 놓은 deque에 숫자를 하나씩 추가한다.
2. 그리고 숫자가 아닌 다른 것이 올 경우 deque를 하나씩 popleft 해서 문자열에 붙여준다.(이렇게 해야 2자리 이상의 숫자도 구분할 수 있다.)
3. defaultdict를 이용해 defaultdict[int(만든 문자열)] += 1을 해주면 해당하는 dictionary가 존재하지 않더라도 dictionary의 default 값을 0으로 인식하고 +1을 해줘서 오류가 발생하지 않는다.3. dictionary를 정렬하여 list에 하나씩 추가해준다.
- dictionary의 value 값에 따른 내림차순으로 정렬한다.
- 내림차순한 dictionary의 key 값을 하나씩 list에 추가해준다.
collections.defaultdict: 해당하는 key의 dictionary가 존재하지 않을 경우 default 값을 반환하는 dictionary이다.
from collections import defaultdict ## 모듈 불러오기 dint = defaultdict(int) ## defaultdict 초기화 dint[3] += 1 ## dint[3]이 없으면 0으로 default 값을 반환해서 +1을 한다.
from collections import deque from collections import defaultdict def solution(s): answer = [] dint = defaultdict(int) dq = deque() for x in s: if x != '{' and x != '}' and x != ',': dq.append(x) else: if dq: st = '' while dq: st += dq.popleft() dint[int(st)] += 1 dint = sorted(dint.items(), key=lambda x:x[1], reverse = True) for i in range(len(dint)): answer.append(dint[i][0]) return answer