본문 바로가기
📊 Algorithm/BOJ

⚠︎ 백준 - 24060 알고리즘 수업 - 병합 정렬 1 👩🏻‍🏫

by 정람지 2024. 4. 11.

재귀 단계를 진짜 끝내자~

 

재귀 단계

피보나치 수 역시 단순 for문으로도 구할 수 있지만, 학습을 위해 재귀를 써 봅시다.

www.acmicpc.net


24060

⚠︎ 알고리즘 수업 - 병합 정렬 1

티어 : 🥈3

분류 : 재귀, 머지 소트

 

머지소트도 시험범위인데~잘댓다

 

import sys

# 머지 소트
def merge_sort(A,p,r): # 배열, 시작, 끝
    if (p < r):
        q = (p+r) // 2 # 반갈
        merge_sort(A,p,q)
        merge_sort(A,q+1,r)
        merge(A,p,q,r)

def merge(A,p,q,r):
    global result
    global k_num

    i = p
    j = q + 1

    tmp = []
    while (i <= q and j <= r):
        if (A[i] <= A[j]):
            tmp.append(A[i])
            i += 1
        else:
            tmp.append(A[j])
            j += 1
    
    while(i <= q):
        tmp.append(A[i])
        i += 1
    while(j <= r):
        tmp.append(A[j])
        j += 1

    i,t = p,0
    while(i <= r): # 저장이 이루어지는 곳 
        A[i] = tmp[t]
        result.append(tmp[t]) 
        k_num += 1
        i += 1
        t += 1
    
# 배열 크기 , 저장횟수
N, K = map(int,sys.stdin.readline().split())
A = list(map(int,sys.stdin.readline().split()))

k_num = 0
result = [0]
merge_sort(A,0,N-1)

if k_num < K:
    print(-1)
else :
    print(result[K])

아니,,,중간에 p 하나 q로써가지고,,,,,

디버깅에아까운시간을,,,,,,,

애매하게 배열변화가 맞아가지고대체어디가틀렸나햇네

 

그 디버깅하는법

제대로알고써보고싶다

백날천날print찍어보기말고


재귀도 찐 끗~!


,,

다시 정통공해야지,,,,

과자사먹어야겟다

두근두근