코딩 테스트/알고리즘
[백준] 23881 알고리즘 수업 - 선택 정렬 1
토자맨
2024. 7. 11. 00:29
문제
코드
전에 풀었던 알고리즘 수업 문제와 동일한 방식으로 풀었다.
선택 정렬 의사 코드를 구현하고 자리 교환이 k번 일어났을 때 자리를 교환한 정수를 출력하는 방식이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class _23881 {
public static void main(String [] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st1 = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st1.nextToken());
int k = Integer.parseInt(st1.nextToken());
StringTokenizer st2 = new StringTokenizer(br.readLine());
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = Integer.parseInt(st2.nextToken());
}
selection_sort(a, k);
}
public static void selection_sort(int[] a, int k) {
int cnt = 0;
for (int i = a.length-1; i > 0; i--) {
// maxidx 찾기
int maxidx = i;
for (int j = i-1; j >= 0; j--) {
if (a[j] > a[maxidx]) {
maxidx = j;
}
}
if (maxidx != i) {
int tmp = a[maxidx];
a[maxidx] = a[i];
a[i] = tmp;
cnt++;
if (cnt == k) {
System.out.println(a[maxidx] + " " + a[i]);
return;
}
}
}
if (cnt < k) {
System.out.println(-1);
}
}
}