정렬
1. K번째 수 lv.1
배열 array의 i번째부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수 구하기
[매개변수]
- 배열 array
- [i, j, k]를 원소로 가진 2차원 배열 commands
[제한사항]
- array의 길이는 1 이상 100 이하입니다.
- array의 각 원소는 1 이상 100 이하입니다.
- commands의 길이는 1 이상 50 이하입니다.
- commands의 각 원소는 길이가 3입니다.
def solution(array, commands):
answer = []
for i,j,k in commands:
answer.append(sorted(array[i-1:j])[k-1])
return answer
한 줄로 표현한 코드는 아래와 같다.
def solution(array, commands):
return list(map(lambda x:sorted(array[x[0]-1:x[1]])[x[2]-1], commands))
해석하자면 commands (i,j,k)를 sorted(array[i-1:j])[k-1]에 매핑시켜서 List 형태로 반환한 코드이다.
두 코드는 구조와 성능 모두 비슷하다.
2. 가장 큰 수 lv.2
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers의 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return.
[제한 사항]
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
def solution(numbers):
answer = ''
numbers=list(map(str, numbers))
numbers.sort(key=lambda x: x*3, reverse=True) # 내림차순, 원소가 1000이하이므로 최소 3자릿수로 만들어줌 (일의 자리 수), 1000일 경우 어차피 100,010,001,000
answer = answer.join(numbers)
return answer
str형으로 변환해주어 이어주는 구조.
numbers 배열 내 원소가 1000 이하이므로 최소한 3자릿수를 만들어주기 위해 3번 이어준다. (일의 자리 수일 경우)
이렇게 되면 문자열 내림차순 정렬을 해주면서 왼쪽부터 3번째 숫자까지 정렬되는 결과를 얻을 수 있다. (ex: '666', '222', '101010')
3. H-Index lv.2
H-Index는 과학자의 생산성과 영향력을 나타내는 지표.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return.
[제한 사항]
- 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
- 논문별 인용 횟수는 0회 이상 10,000회 이하입니다.
def solution(citations):
citations.sort(reverse=True)
answer = max(map(min, enumerate(citations, start=1)))
return answer
논문 인용 횟수를 내림차순 정렬
논문 개수(i)와 논문 인용 횟수(c) 중 작은 값을 선택하고 그 중에서 max값으로 h-index를 구하는 방법
def solution(citations):
citations = sorted(citations)
l = len(citations)
for i in range(l):
if citations[i] >= l-i:
return l-i
return 0
논문 인용 횟수를 오름차순 정렬
현재 논문의 인용 횟수가 남은 논문 수보다 크거나 같으면 h-index는 남은 논문 수와 같다.