1 분 소요

삽입 정렬

image

9는 이미 정렬된 상태이다.
7을 기준으로 7보다 앞쪽 수열 중 7이 들어갈 자리를 탐색한다.
7은 9보다 작으므로 9 앞으로 삽입

삽입 정렬 vs 선택 정렬

삽입 정렬의 경우는 진짜 삽입 하기 때문에 이를 위해서 그 삽입할 자리를 만들어주기 위해서 실제로 리스트 상의 수열들을 오른쪽(또는 왼쪽)으로 자리를 이동시켜준다.

하지만 선택 정렬의 경우는 바꿀 두 수를 선택 해서 두 수의 위치만 바꾸어 준다.

코드

def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]
        j = i - 1  # key 값 바로 앞부터 인덱스 0까지 중 key가 들어갈 자리 찾기

        while j >= 0 and arr[j] >= key:
            arr[j + 1] = arr[j]
            j -= 1
        arr[j + 1] = key

    return arr

백준 24051 알고리즘 수업-삽입 정렬 1

코드

# 24051 알고리즘 수업-삽입 정렬 1

import sys


def insertion_sort(arr):
    global cnt, k
    for i in range(1, len(arr)):
        key = arr[i]
        compare_idx = i - 1

        while compare_idx >= 0 and arr[compare_idx] > key:
            arr[compare_idx + 1] = arr[compare_idx]
            compare_idx -= 1
            cnt += 1
            if k == cnt:
                return arr[compare_idx + 1]

        if compare_idx + 1 != i:
            arr[compare_idx + 1] = key
            cnt += 1
            if k == cnt:
                return arr[compare_idx + 1]

    return -1


input = sys.stdin.readline
n, k = map(int, input().split())
nums = [int(i) for i in input().split()]
cnt = 0
print(insertion_sort(nums))

아 tlqkf,,,아니 loacl -> global 자체는 시간이 많이 든다,, 아니 이 문제 은근 빡침,,,,,

질문 게시판을 찾아보니까 # Python3 으로는 제한 시간 내에 수행이 되지 않으니 PyPy3로 제출하시기를 권장합니다 :) 이런 문장 발견,,, -> 같은 코드 제출했는데 맞음,, 담부터는 PyPy3으로 제출해야겠다 ㅎㅎㅎ

댓글남기기