본문 바로가기
Coding Test/Programmers

[Python] 프로그래머스 알고리즘 고득점 Kit ✅ 정렬

by hyeeein 2024. 9. 29.

[Level 1] K번째 수

def solution(array, commands):
    answer = []

    for com in range(len(commands)):
        i, j, k = commands[com][0], commands[com][1], commands[com][2]
        result = array[i-1:j]
        result.sort()
        answer.append(result[k-1])

    return answer

 

[Level 2[ 가장 큰 수

* 문자형으로 변환하는 함수: str()

* 리스트 내림차순 정렬: 리스트.sort(reverse=True)

 

<문제 풀이 핵심 포인트>

1. x*3 (문자열을 3번 뒤에 더한다.)

  • 문자열에서의 대소비교는 문자열 첫 번째 인덱스를 아스키 숫자로 바꿔 비교하고, 같으면 다음 인덱스를 비교하는 형식
  • 예를 들어 [3, 310, 30] 이 있다면 원래대로 내림차순 정렬하면 310, 30, 3이 되지만 3이 가장 앞에 와야 가장 큰 수가 만들어질 수 있음
  • x*3을 하게 되면 [3, 310, 30] -> [333310310310, 303030] 이렇게 된다. 자릿수를 맞춰 비교하기 위함이다.
  • 문자열을 3번 쓰는 이유는 문제 조건에서 입력되는 숫자의 최대 크기가 1000미만이라 제시했기 때문임

2. 마지막에 str을 int로 바꾸었다가 다시 str로 바꾸기

  • '000' 이나 '00' 등이 나올 경우 '0'으로 줄여서 반환하기 위함
def solution(numbers):
    answer = ''
    
    numbers = list(map(str, numbers))
    numbers.sort(key=lambda x: x*3, reverse=True)
    
    answer = str(int(''.join(numbers)))
    
    return answer
 

[프로그래머스 Lv.2][정렬] 가장 큰 수 (python)

문제 설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중

yuna0125.tistory.com

 

[Level 2] H-Index

def solution(citations):
    answer = 0
    
    # 정렬하면 0, 1, 3, 5, 6
    citations.sort()
    n = len(citations)  # 길이는 5
    
    # 부터 0까지 -1씩 감소하는 반복문
    for i in range(n):
        h_index = n-i  # 가장 큰 h를 구하는 것이므로 가장 큰 것부터 구해봄 (5 빼기 0은 5)
        
        # 정렬했던 citations의 인덱스 앞부터 h_index와 비교
        # h_index보다 citations 원소 값이 같거나 커지는 순간 종료
        if citations[i] >= h_index:
            answer = h_index
            break
            
    return answer

 

 

프로그래머스 문제 풀이 H-Index

문제 URL H-Index Contents 문제 지문 파악하기 구르미의 알고리즘 풀이 문제 지문 파악하기 이번에도, 입력을 통해서 문제를 파악해보도록 하겠습니다. 문제의 입력은 이렇습니다. 입렵: citations = [3,

gurumee92.tistory.com