[프로그래머스] 코딩테스트 고득점 Kit - 정렬 (파이썬)

철웅·2023년 3월 2일
0
post-thumbnail

💻 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
  1. 슬라이싱으로 array 자른 후 sort
  2. 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)))
  1. 자릿수별로 비교가 가능하게 하기위해 문자로 변환
  2. 해당 문자열을 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하게 한다.

0개의 댓글