반응형
문제
https://www.acmicpc.net/problem/24060
풀이
병합 정렬의 동작과정을 안다면 조금 더 쉽게 이해할 수 있습니다.
모른다면.. 일단 의사코드를 Swift 언어로 풀어서 작성해봅시다.
의사코드를 작성하는데 주의점이 하나 있습니다.
merge 함수에서 t를 1번 인덱스로 초기화하는데, 이를 0으로 바꿔줍시다.
의사코드가 작성이 되었다면 병합 정렬이 정상적으로 동작이 될 것입니다.
이제 K번째 저장되는 수를 구해줘야 합니다.
저장이 되는 부분은 의사코드에 주석으로 작성이 되어있습니다.
외부에 count 변수를 하나 두어서, 저장될 때 count 변수를 1씩 늘려줍시다.
k번째 저장이 되는 수의 값을 -1로 두고
만약 k번째 저장이 된다면 k번째 저장이 되는 수의 값을 저장이 되는 수의 값으로 변경시켜줍시다.
k번까지 저장이 안된다면, -1의 값을 갖고 있을 것입니다.
그 후 k번째 저장 되는 수를 출력해줍시다. k보다 작으면 -1이 출력될 것입니다.
소스코드
후기
병합 정렬을 소스코드로는 처음 봐서 조금 까다로웠던 문제였습니다.
의사코드를 Swift언어로 바꿔서 작성해보고, 저장이 되는 곳의 코드만 살짝 수정해주어서 풀었습니다.
반응형
'PS > 백준' 카테고리의 다른 글
[BOJ] 백준 11729 하노이 탑 이동 순서 (Swift) (0) | 2023.03.15 |
---|---|
[BOJ] 백준 2447 별찍기 - 10 (Swift) (0) | 2023.03.15 |
[BOJ] 백준 25501 재귀의 귀재 (Swift) (0) | 2023.03.14 |
[BOJ] 백준 10870 피보나치 수 5 (Swift) (0) | 2023.03.14 |
[BOJ] 백준 10872 팩토리얼 (Swift) (0) | 2023.03.14 |