본문 바로가기
Algorithm/프로그래머스 고득점 Kit

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

by _temp 2022. 3. 4.

1. K번째수 (Lv. 1)

# K번째수
def solution(array, commands):
    answer = []
    for start, end, k in commands:
        sliced = array[start-1:end]
        sliced.sort()
        answer.append(sliced[k-1])
    return answer

 

문제 그대로 슬라이싱 하고 정렬을 해준 다음 k번째 수를 answer에 append


2. 가장 큰 수 (Lv. 2)

# 가장 큰 수
def solution(numbers):
    numbers = list(map(str, numbers))
    numbers.sort(key=lambda x: x*3)
    numbers.reverse()
    answer = int(''.join(numbers))
    return str(answer)

 

numbers리스트의 요소들을 문자열로 바꿔준다.

해당 문자열을 3배씩 해준 값으로 정렬을 해준다.

('30'이 '3'보다 크게 나오므로 '303030'과 '333'으로 둘째, 셋째 자리까지 비교해야 하기에 최소 3배를 해준다.)

해당 문자열을 reverse를 해주고 join해준다.

int를 한 번 해주고 ('00'일 경우, '0'으로 나와야 함)

다시 문자열로 바꿔준 값을 return


3. H-Index (Lv. 2)

# H-index
def solution(citations):
    citations.sort(reverse=True)
    answer = 0
    for x in citations:
        if x > answer:
            answer += 1
        else:
            break
    return answer

 

citations리스트를 내림차순으로 정렬을 해준다.

h-indx(answer)는 0부터 시작해서 1씩 증가하면서 citations와 비교를 해준다.

(x는 논문이 인용된 횟수, answer는 인용된 논문의 개수)

문제에서 'h번 이상 인용된 논문이 h개 이상이어야 한다'의 최댓값을 찾기 위해서 h를 0부터 증가해 나간다.