[Python] 프로그래머스 정렬 문제 풀이 모음

송히·2024년 5월 10일
0
post-thumbnail

프로그래머스 - 알고리즘 고득점 Kit 정렬 풀이 모음

: 프로그래머스 코딩테스트 연습 Python 알고리즘별로 풀어보기


🔍 정렬 > K번째수

클릭해서 문제 전체 보기🔼

📖 풀이 코드

def solution(array, commands):
    result = []
    
    for i, j, k in commands:
        newArr = sorted(array[i-1:j])
        result.append(newArr[k-1])
        
    return result

📢 풀이 설명
for문에서 i, j, k를 바로 받을 수 있다는 걸 까먹지 마세용~


🔍 정렬 > 가장 큰 수

클릭해서 문제 전체 보기🔼

📖 풀이 코드

def solution(numbers):
    if len(numbers) == 1: return str(numbers[0])

    numbers = list(map(str, numbers))
    numbers.sort(key = lambda x: x*3, reverse = True)
    
    return str(int("".join(numbers)))  # 원소가 0 뿐일 경우 방지

📢 풀이 설명
이 문제는 숫자 크기대로 정렬하면 안 되고, 각 원소의 1번 자리 - 2번 자리 - ...를 봐야한다. 그래서 리스트 속 원소를 문자열로 바꿔서 비교해야한다.
이때 n번 자리까지 같아도 문자열 길이가 짧으면 작은 수로 판단된다.
이 문제에서 필요한 건 이 숫자들이 해당 자리에 왔을 때 가지는 값이기 때문에, 같은 조건에서 비교하기 위해 *3배하는 것이다.
3인 이유는, 각 원소는 1000 이하라고 했으니까 가장 긴 원소의 길이가 3이기 때문이다.

ex) "3", "34", "305"일 때
1. 그냥 비교 => "3", "305", "34" 순서임
2. 3배 곱해 비교했을 때 => "333", "343434", "305305305" 이니까 "305", "3", "34" 순서임


🔍 정렬 > H-Index

클릭해서 문제 전체 보기🔼

📖 풀이 코드

def solution(citations):
    result = 0
    citations.sort(reverse = True)
    
    for (idx, h) in enumerate(citations):
        if h < (idx + 1): return result
        result += 1

    return result

📢 풀이 설명
논문들을 인용 많은 순으로 정렬하면 각 논문의 idx + 1은 해당 논문 인용수 이상 인용된 논문들의 개수가 된다.
그 논문들을 for문으로 돌며, 논문의 인용수보다 idx가 작거나 같으면 result += 1을 하고, 커지게 되면 return한다.

profile
데브코스 프론트엔드 5기

0개의 댓글

관련 채용 정보