https://www.acmicpc.net/problem/23881
문제의 제목에서도 확인할 수 있듯이 선택 정렬의 개념을 응용하여 해답을 구하는 문제이다.
교환이 발생하는 과정을 확인해야 하기 때문에 교환 횟수를 체크할 변수 cnt
를 선언하고, 최종적으로 출력될 값 answer
를 선언한다.
루프를 진행하면서 원소의 자리 교체가 이루어지는 경우 cnt + 1
을 하여 cnt
와 교환 횟수 K
가 같아지는 시점에 answer
의 값을 변경한다.
N
, 교환 횟수 K
, 배열 A의 원소를 각각 sys.stdin.readline()
을 활용하여 입력받는다.max_item
변수에 저장한다.max_item
이 가장 마지막 원소가 아닐 경우, 마지막 원소와 자리를 교환한 뒤 cnt
에 1을 더해준다.cnt
의 값이 K
가 되었을 때, answer
의 값을 arr[i]
, max_item
으로 포매팅한다.import sys
n, k = map(int, sys.stdin.readline().split())
arr = list(map(int, sys.stdin.readline().split()))
cnt = 0
answer = -1
def selection(arr):
global cnt, answer
for i in range(n-1, 0, -1):
max_item, idx = arr[0], 0
for j in range(1, i+1):
if arr[j] > max_item:
max_item, idx = arr[j], j
if arr[i] != arr[idx]:
arr[i], arr[idx] = arr[idx], arr[i]
cnt += 1
if cnt == k:
answer = f'{arr[idx]} {arr[i]}'
return answer
print(selection(arr))