문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/42579
문제 풀이
- 구해야 할 값은 각 장르의 총 합, 해당 장르에서의 최대 재생횟수 2개 추출
- 어떤 장르들이 있는지 알기 위해 장르 리스트를 집합화 시켜서 중복을 없애고 다시 리스트화 시켜줌(index 처리를 위해)
- 어떤 값이 최솟값이 될지 모르므로 "a"라는 장르는 -1 번 이라는 고정값을 넘겨주기 위해 gens와plays에 "a",-1 추가
- g라는 리스트는 각 행에 [해당 장르 총 재생수, 최대 재생 고유 넘버, 2번째로 많이 재생된 고유 넘버] 정보가 담김
- 2번째 최대 재생 수보다 현재 알아볼려는 값이 더 작더면 continue, 최대 재생 수와 동일하다면 고유 넘버가 낮은 것부터 출력되므로 2번째 넘버에 넣어줌
- 최대보다 크다면 [현재 넘버, 이전 최대 넘버]
- 최대와 2번째 최대 사이라면 [최대 넘버, 현재 넘버]
소스 코드
def solution(gens, plays):
answer = []
s = list(set(gens))
n = len(s)
m=len(gens)
gens=["a"]+gens
plays=[-1]+plays
g = [[0,0,0] for i in range(n+1)]
for i in range(1,m+1):
idx = s.index(gens[i])
a,b= g[idx][1:]
play = plays[i]
A,B = plays[a],plays[b]
g[idx][0]+=play
if play<=B:
continue
elif play==A:
g[idx][1:]=[a,i]
elif play>A:
g[idx][1:]=[i,a]
else:
g[idx][1:]=[a,i]
g.sort(key=lambda x:-x[0])
for i in range(n+1):
a, b = g[i][1]-1,g[i][2]-1
if a!=-1:
answer.append(a)
if b!=-1:
answer.append(b)
return answer
print(solution(["classic", "pop", "classic", "classic", "pop"],[500, 600, 150, 800, 2500]))
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[2020 카카오 인턴십] 스티커 모으기(2) (0) | 2023.04.07 |
---|---|
[2019카카오] 불량 사용자 (0) | 2023.04.07 |
[연습 문제] 숫자 게임 (0) | 2023.04.05 |
[우선순위 큐] 야근 지수 *** (0) | 2023.04.03 |
[그리디] 단속 카메라 (0) | 2023.04.03 |