풀이 과정 3

[Python] 베스트앨범

1. 문제 2. 풀이 과정 방법 1) def solution(genres, plays): answer = [] hash1 = {} #장르별 분류 [재생횟수, 고유번호] 쌍을 저장 hash2 = {} #장르별 속한 노래들의 재생 수의 합 for i in range(len(genres)): #장르별 분류 if genres[i] not in hash1.keys(): hash1[genres[i]] = [] hash1[genres[i]].append([-plays[i], i]) #정렬하기 쉽게 재생 횟수를 -로 저장 #속한 노래들의 재생 수의 합 if genres[i] not in hash2.keys(): hash2[genres[i]] = 0 hash2[genres[i]] += plays[i] #합이 큰 순서대로..

[Python] 큰 수 만들기

1. 문제 2. 풀이 과정 방법 1) 시간 초과 number에서 k개를 뺏을 때 len(number) - k 길이의 수를 만들어야 한다. 이 조건에서 첫 번째 자리가 될 수 있는 수는 뒤에서 count 했을 때, 원하는 길이 이상인 값들이 그 후보이다. 최댓값과 그의 index값을 따로 찾는 데에 시간이 오래 걸렸다고 판단하였다. def solution(number, k): answer = '' pre_idx = -1 for i in range(1, len(number)-k+1)[::-1]: #이전에 선택한 값의 뒤부터 길이에 맞는 곳까지 중 최대값 찾기 answer += max(number[pre_idx+1:len(number)-i+1]) pre_idx = number[pre_idx+1:len(numb..

[Python] 가장 큰 수

1. 문제 2. 풀이 과정 개인적으로 테스트 케이스들을 생각해보는 게 알고리즘을 떠올리기가 좋았다. [CASE1] 두 수 비교부터 생각해보면, [35, 3443]이 있다고 가정하자. 참고로, 숫자와 달리 문자열은 아스키코드에 따라 인덱스 0번째부터 비교해간다. 오름차순으로 정렬하면 [3443, 35]가 되며 큰 수부터 나열하면 정답인 "353443"을 반환한다. [CASE2] 그러면 [34, 3421]인 경우를 생각해보자. 이미 정렬된 상태로 정답인 "343421"과 다른 "342134"를 반환한다. 여기 문제는 34의 자릿수가 적어서 발생한다. 문자열 정렬과 위 문제는 이 부분에서 차이가 난다. 결론 CASE1)처럼 자릿수가 끝나기 전에 그 자릿수까지의 숫자가 달라서 정렬이 되면 상관없지만, 그 자릿수..