본문 바로가기

PS/백준

[BOJ] 백준 24060 알고리즘 수업 - 병합 정렬 1 (Swift)

반응형

문제

https://www.acmicpc.net/problem/24060

 

24060번: 알고리즘 수업 - 병합 정렬 1

첫째 줄에 배열 A의 크기 N(5 ≤ N ≤ 500,000), 저장 횟수 K(1 ≤ K ≤ 108)가 주어진다. 다음 줄에 서로 다른 배열 A의 원소 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 109)

www.acmicpc.net

풀이

병합 정렬의 동작과정을 안다면 조금 더 쉽게 이해할 수 있습니다.
모른다면.. 일단 의사코드를 Swift 언어로 풀어서 작성해봅시다.

의사코드를 작성하는데 주의점이 하나 있습니다.
merge 함수에서 t를 1번 인덱스로 초기화하는데, 이를 0으로 바꿔줍시다.

의사코드가 작성이 되었다면 병합 정렬이 정상적으로 동작이 될 것입니다.

이제 K번째 저장되는 수를 구해줘야 합니다.

저장이 되는 부분은 의사코드에 주석으로 작성이 되어있습니다.
외부에 count 변수를 하나 두어서, 저장될 때 count 변수를 1씩 늘려줍시다.

k번째 저장이 되는 수의 값을 -1로 두고
만약 k번째 저장이 된다면 k번째 저장이 되는 수의 값을 저장이 되는 수의 값으로 변경시켜줍시다.

k번까지 저장이 안된다면, -1의 값을 갖고 있을 것입니다.

그 후 k번째 저장 되는 수를 출력해줍시다. k보다 작으면 -1이 출력될 것입니다.

소스코드

후기

병합 정렬을 소스코드로는 처음 봐서 조금 까다로웠던 문제였습니다.
의사코드를 Swift언어로 바꿔서 작성해보고, 저장이 되는 곳의 코드만 살짝 수정해주어서 풀었습니다.

반응형