프로그래머스 고득점 Kit(Python) - 1. 해시

안예진·2021년 5월 5일

programmersKit

목록 보기
1/5
post-thumbnail

해시

완주하지 못한 선수

Dictionary 사용
participant 이름 : 인원 세팅 ==> completion에서 한명씩 제거

def solution(participant, completion):
    parDict = {}
    
    for par in participant:
        parDict[par] = parDict.get(par,0) + 1
    #print(parDict)
    
    for com in completion:
        parDict[com] = parDict[com]-1
        
    for key in parDict.keys():
        if parDict[key]!=0:
            return key

전화번호 목록

phone_book 정렬 -> 오름차순으로 정렬되니 앞뒤로 접두사 비교하면 된다!

def solution(phone_book):
    answer = True
    phone_book.sort()
    idx = 0
    while idx < len(phone_book)-1:
        if phone_book[idx+1][:len(phone_book[idx])] == phone_book[idx]:
            return False
        else:
            idx += 1
    
    return answer
def solution(phone_book):
    answer = True
    phone_book.sort()
    # phone_book = sorted(phone_book)
    idx = 0
    
    for prev,nxt in zip(phone_book, phone_book[1:]):
        if(nxt.startswith(prev)):
            return False
    
    return answer

전화번호 목록

category별로 갯수를 세서 dict에 넣음
=> (갯수+1)*(갯수+1)...*(갯수+1)-1 이 0을 제외한 약수의 개수임을 활용

def solution(clothes):
    answer = 1
    categories = {}
    
    for item,category in clothes:
        categories[category] = categories.get(category,0) + 1
    
    for key in categories.keys():
        answer *= categories[key] + 1
    
    return answer - 1
def solution(clothes):
    from collections import Counter
    from functools import reduce
    cnt = Counter([kind for name, kind in clothes])
    answer = reduce(lambda x, y: x*(y+1), cnt.values(), 1) - 1
    return answer

베스트앨범

totalPlayPerGenre에는 genre:play시간의합
playListPerGenre에는 genre: [play시간, 번호] 리스트
1. totalPlayPerGenre에서 play시간의합 내림차순으로 정렬
2. 정렬된 genre를 가지고 playListPerGenre에서 play시간 내림차순 & 번호 오름차순 정렬
3. min(2,len(sortedPlay)) 를 answer에 넣기

def solution(genres, plays):
    answer = []
    totalPlayPerGenre = {}
    playListPerGenre = {}
    
    for idx,gp in enumerate(zip(genres, plays)):
        totalPlayPerGenre[gp[0]] = totalPlayPerGenre.get(gp[0], 0) + gp[1]
        if gp[0] not in playListPerGenre.keys():
            playListPerGenre[gp[0]] = [[gp[1],idx]]
        else:
            playListPerGenre[gp[0]].append([gp[1],idx])
        
    sortedGenre = sorted(totalPlayPerGenre.items(), key=(lambda x: x[1]), reverse=True)
    
    for gp in sortedGenre:
        sortedPlay = sorted(playListPerGenre.get(gp[0]),key=(lambda x : (-x[0],x[1])))
        for play,idx in sortedPlay[:min(2,len(sortedPlay))]:
            answer.append(idx)
    
    return answer
def solution(genres, plays):
    answer = []
    d = {e:[] for e in set(genres)}
    for e in zip(genres, plays, range(len(plays))):
        d[e[0]].append([e[1] , e[2]])
    genreSort =sorted(list(d.keys()), key= lambda x: sum( map(lambda y: y[0],d[x])), reverse = True)
    for g in genreSort:
        temp = [e[1] for e in sorted(d[g],key= lambda x: (x[0], -x[1]), reverse = True)]
        answer += temp[:min(len(temp),2)]
    return answer
profile
에국은 에구구구...

0개의 댓글