[프로그래머스/Python] 해시 - 베스트앨범

Sujin Lee·2022년 3월 28일
0

코딩테스트

목록 보기
4/172
post-thumbnail

👩🏻‍🏫 다른 풀이

def solution(genres, plays):
    answer = []

    dic1 = {}
    dic2 = {}

    for idx, (g, p) in enumerate(zip(genres, plays)):
		# {'classic': [(0, 500), (2, 150), (3, 800)], 'pop': [(1, 600), (4, 2500)]}
		if g not in dic1:
            dic1[g] = [(idx, p)]
        else:
            dic1[g].append((idx, p))
		# {'classic': 1450, 'pop': 3100}
        if g not in dic2:
            dic2[g] = p
        else:
            dic2[g] += p
	# dict_items([('classic', 1450), ('pop', 3100)])
    for (k, v) in sorted(dic2.items(), key=lambda x:x[1], reverse=True):
        for (i, p) in sorted(dic1[k], key=lambda x:x[1], reverse=True)[:2]:
            answer.append(i)

    return answer

✏️ Python 문법

리스트.sort() vs sorted(리스트)

  • 매개변수: key, reverse
  • reverse: bool값을 넣는다. 기본값은 reverse=False(오름차순),
    reverse=True으로 내림차순 정렬할 수 있다.
num_list = [3,4,77,34,66]
num_list.sort(reverse=True)

print(num_list) # [77, 66, 34, 4, 3]
print(sorted(['좋은하루','good_morning','굿모닝','niceday'], reverse=True))
['좋은하루', '굿모닝', 'niceday', 'good_morning']
  • key: 정렬을 목적으로 하는 함수를 값으로 넣는다. lambda를 이용할 수 있다. key 값을 기준으로 정렬되고 기본값은 오름차순이다.
str_list = ['좋은하루','good_morning','굿모닝','niceday']

print(sorted(str_list, key=len))  # ['굿모닝', '좋은하루', 'niceday', 'good_morning']
print(sorted(str_list, key=lambda x : x[1])) # ['niceday', 'good_morning', '굿모닝', '좋은하루']

tuple_list = [('좋은하루', 0), ('niceday', 1), ('좋은하루', 5), 
    	     ('good_morning', 3), ('niceday',5)]   
             
tuple_list.sort(key=lambda x : (x[0], x[1])) 
print(tuple_list) # [('good_morning', 3), ('niceday', 1), ('niceday', 5), ('좋은하루', 0), ('좋은하루', 5)]
tuple_list.sort(key=lambda x : (-x[1], x[0]))
print(tuple_list) # [('niceday', 5), ('좋은하루', 5), ('good_morning', 3), ('niceday', 1), ('좋은하루', 0)]

enumerate 함수

  • 리스트가 있는 경우 순서와 리스트의 값을 전달하는 기능
  • 순서가 있는 자료형(list, set, tuple, dictionary, string)을 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 리턴
  • 보통 enumerate 함수는 for문과 함께 자주 사용
data = enumerate((1, 2, 3))
print(data, type(data)) # <enumerate object at 0x7fdfadfdf4c0> <class 'enumerate'>

for i, value in data:
    print(i, ":", value)
# 0 : 1
# 1 : 2
# 2 : 3

data = enumerate({1, 2, 3})
for i, value in data:
    print(i, ":", value)
# 0 : 1
# 1 : 2
# 2 : 3

data = enumerate([1, 2, 3])
for i, value in data:
    print(i, ":", value)
# 0 : 1
# 1 : 2
# 2 : 3

dict1 = {'이름': '김지니', '나이': 33}
data = enumerate(dict1)
for i, key in data:
    print(i, ":", key, dict1[key])
# 0 : 이름 김지니
# 1 : 나이 33

data = enumerate("재미있는 파이썬")
for i, value in data:
    print(i, ":", value)
# 0 : 재
# 1 : 미
# 2 : 있
# 3 : 는
# 4 :  
# 5 : 파
# 6 : 이
# 7 : 썬


한줄 평: 혼자 풀지못했다. sort, lambda, enumerate....😂

references
https://ooyoung.tistory.com/59

profile
공부한 내용을 기록하는 공간입니다. 📝

0개의 댓글