[Python] 2019 카카오 개발자 겨울 인턴십 : 튜플(defaultdict)

송진영·2022년 9월 4일
0

프로그래머스-python

목록 보기
5/22

2019 카카오 개발자 겨울 인턴십 : 튜플

문제풀이

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에 하나씩 추가해준다.

  1. dictionary의 value 값에 따른 내림차순으로 정렬한다.
  2. 내림차순한 dictionary의 key 값을 하나씩 list에 추가해준다.

collections.defaultdict(사전의 기본값 처리)

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
profile
못하는 건 없다. 단지 그만큼 노력을 안 할 뿐이다.

0개의 댓글