2/프로그래머스

프로그래머스 연습 문제 - 베스트앨범

하례은 2020. 10. 28. 22:48

programmers.co.kr/learn/courses/30/lessons/42579

 

코딩테스트 연습 - 베스트앨범

스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가

programmers.co.kr

level3 해시

 

1.

def solution(genres, plays):
    answer = []
    result = {}
    for x, y in zip(genres,plays):
        result[x] = result.get(x,[])
        result[x].append(y)

    result = sorted(result.items(),key= lambda x: sum(x[1]),reverse=True)

    for i in range(len(result)):
        result[i][1].sort()
        result[i][1].reverse()

    dic = {key:value for key, value in zip(plays, range(len(plays)))}

    print(result, dic)
    for i in result:
        for j in range(2):
            if dic[i[1][j]] in answer:
                num = plays.count(i[1][j]) -1
                index = answer.index(dic[i[1][j]])
                answer[index] = answer[index] - num
                answer.append(answer[index] + 1)
            else:
                answer.append(dic[i[1][j]])
            if len(i[1]) == 1:
                break


    return answer

dic 부분을 괜히 딕셔너리로 만들어서 한참 고생했다 ㄱ-... 딕셔너리는 중복 허용 불가한데 문제에선 중복되는 수가 있을 수 도 있으므로 딕셔너리를 쓰면 마지막 고유번호만 들어가서 안됨.

 

2.

def solution(genres, plays):
    answer = []
    result = {}
    for x, y in zip(genres,plays):
        result[x] = result.get(x,[])
        result[x].append(y)

    result = sorted(result.items(),key= lambda x: sum(x[1]),reverse=True)

    for i in range(len(result)):
        result[i][1].sort()
        result[i][1].reverse()

    dic = [[key,value] for key, value in zip(plays, range(len(plays)))]

    print(result, dic)
    for i in result:
        for j in range(2):
            for x in dic:
                if x[0] == i[1][j]:
                    answer.append(x[1])
                    dic.remove(x)
                    break
            if len(i[1]) == 1:
                break


    return answer

 

그래서 딕셔너리 부분을 리스트로 고치고 result와 dic을 비교해주는 방법으로 풀었다. 하지만 이러면 시간이 너무 많이들어 시간초과까지 아슬아슬하다... 더 좋은 방법을 생각하는게 좋을듯.