💻 K번째 수 (level 1)
def solution(array, commands):
answer = []
for i in range(len(commands)):
temp = array[commands[i][0]-1 : commands[i][1]]
temp.sort()
answer.append(temp[commands[i][2]-1])
return answer
- 슬라이싱으로 array 자른 후 sort
- k번째 수 append
💻 가장 큰 수 (level 2)
def solution(numbers):
numbers = list(map(str, numbers))
numbers.sort(key=lambda x: x * 3, reverse=True)
return str(int(''.join(numbers)))
- 자릿수별로 비교가 가능하게 하기위해 문자로 변환
- 해당 문자열을 3번 연달아 이은 값으로 비교
이유1 : 34 30 3의 예시를 보면 끝자리 수로 비교를 해야한다는 걸 알 수 있다. -> 4 0 3 이므로 34 3 30 순서
이유2 : 굳이 *3
을 한 이유는 num이 1000이하의 수이기 때문이다.
9 991 이렇게 두 수 가있다고 치자 -> 끝자리 수를 비교하면 9 1 이므로 9 991 순서가 정상이다. 근데 *2를 한다면 99 991991 이므로 991이 더 앞으로 오게 된다.(오답)
- 뭔가 쉬워보이는데 개 어려움, 풀 수 있을거 같아서 계속 도전했지만 안되길래 그냥 답 봤다.
- 파이썬은 정렬에서 lambda 함수가 정말 중요한거 같다.
💻 H-Index (level 2)
def solution(citations):
citations.sort()
l = len(citations)
for i in range(l):
if citations[i] >= l-i :
return l-i
return 0
if citations[i] >= l-i :
: l-i는 정렬했을 때 자기 포함 앞에 있는 개수이므로 h번 이상 인용된 논문이 h번 이상 있다는 뜻이다
- 인용된 논문의 개수 (h)의 최댓값을 찾는것이므로 오름차순 정렬했을 때 해당 조건을 만족하면 바로 return하게 한다.