1 분 소요

문제

리트코드 Minimum Number of Pushes to Type Word II

문제 풀이 및 회고

10분만에 풀었고 정확하게 생각했지만 몇가지 기록해둘 게 있어서 기록하기 위해 글을 남긴다.

코드(python)

1. 내 풀이

from collections import defaultdict

class Solution(object):
    def minimumPushes(self, word):
        """
        :type word: str
        :rtype: int
        """
        # key - 8 numbers (2~9)
        # one letter to one key
        
        NUM_DICT = defaultdict(lambda:0)
        n = len(word)

        for i in range(n):
            NUM_DICT[word[i]] += 1
        
        if len(NUM_DICT) <= 8: # 가짓수가 8개 이하면 2 ~ 9까지 수 8개 중에 아무거나 배치하고 1씩 늘리면 됨
            return len(word) # 답은 문자 길이
        
        NUM_DICT = sorted(NUM_DICT.items(), key = lambda x:(x[1]), reverse=True) # 1*8 2*... 식으로 갯수 많은거부터 1씩 채워서 1 2 3 4 최대 8개로 하면됨
        answer = 0
        for i in range(len(NUM_DICT)):
            answer += NUM_DICT[i][1] * (i//8 + 1) 
        return answer

from collections import Counter 써도 되는데 저게 거의 2배가량 더 빠름(왜인지 모름 ㄷㄷ 찾아보니 초기화할 때 더 많은 시간이 소요될 수도 있다고 함)

2. 훨씬 빠른 풀이들

class Solution(object):
    def minimumPushes(self, word):
        """
        :type word: str
        :rtype: int
        """
        letters = set(word)
        d = []
        for i in letters:
            d.append(word.count(i))
        count = sorted(d)
        sum = 0
        for i in range(len(count)):
            sum += count[len(count)-i-1] * (i/8 + 1)
        return(sum)

단순히 수 세는 거에서는 set으로 자료형을 바꾸고 list.count가 빠른가봄

궁금한 것들이나 추가 및 수정했으면 좋겠는 거 말해주시면 좋을 거 같아요. 좋은 하루 보내시길 바래요 :)

댓글남기기