정렬

happiyoung_·2026년 4월 21일

codingtest

목록 보기
2/6

핵심

정렬을 왜 할까?

  • 오름차순/내림차순 정렬시에 가져오는 효과에 대해 집중
  • 정렬을 진행한다면 도중에 멈출 수 있는 하나의 조건을 가져올 수 있음
  • 정렬을 진행한다면 최대, 최소를 고려해 로직을 짜고, 특정 값 이후는 작으니까 절대 불가 또는 특정 값 이후는 크니까 절대 불가 이런 관점을 가져올 수 있음

문자열 슬라이싱

  • 인덱스 조심하기 (0부터 시작하는지 1부터 시작하는지)

정렬 함수

  • list.sort() : 리스트에 대해서 정렬 후 저장
  • sorted : 정렬 후 리스트 반환 (원본 변경 x)

1. K번째수

def solution(array, commands):
    answer = []
    for cmd in commands:
        i, j, k = cmd #리스트 각 변수로 가져오는 방법
        target = sorted(array[i - 1:j]) # 리스트 슬라이싱 진행
        answer.append(target[k-1]) # k번째의 원소 리스트에 추가
    return answer

2. 가장 큰 수

def solution(numbers):
    answer = ''
    # 배열 내부 오름차순으로 정렬 (문자열 기준)
    #result = [str(x) for x in numbers]
    result = list(map(str, numbers))
    # 각 요소 별 첫번째 숫자가 가장 클수록 처음에 오도록 해야함
    #sorted_result = sorted(result, reverse = True)
    result.sort(key=lambda x:x * 3, reverse=True) # 요소의 길이가 1000 이하 이므로 3을 곱해서 길이를 맞춰준 다음에 sorting
    # 문자열로 바꾸어 리턴
    #answer = ''.join(sorted_result)
    return str(int(''.join(result))) # 000인 반례를 해결하지 못하기에 int로 다시 변환

3. H-Index

def solution(citations):
    # 내림차순 정렬을 해서 인용수가 가장 많은 것 부터 논문의 수 (index+1) 비교
    citations.sort(reverse=True)
    # 리스트를 돌면서 index 와 그에 해당하는 값을 동시에 가져오는 함수 enum
    # 인덱스랑 값 둘 다 필요할 때 사용
    for i,c in enumerate(citations): # c = 인용수, i+1 = 논문수
        if c < i + 1:
            return i
        # 어차피 h 값은 논문의 총개수가 최대값
    return len(citations)

주요 함수

# 리스트 컴프리헨션
[str(x) for x in arr]
# map
list(map(str, arr))
# enumerate
for i, x in enumerate(arr):
# 정렬 key
sort(key=...)

0개의 댓글