#23882: 알고리즘 수업 – 정렬 선택 2
첫 번째 줄은 배열 A의 크기 N(5 ≤ N ≤ 10,000)과 교환 횟수 K(1 ≤ K ≤ N)를 제공합니다.
다른 배열 A의 요소 A1, A2, …, AN은 다음 줄에 지정됩니다.
(1 ≤ AI ≤ 109)
www.acmicpc.net
문제
오늘도 서준이는 선별수업을 가르치고 있다.
아버지께서 가르치신 내용을 학생들이 문제를 통해 이해했는지 확인해 봅시다.
N 개의 고유한 양의 정수가 있는 배열 A가 있습니다.
배열 A가 선택 정렬에 의해 오름차순으로 정렬되면 K 교환이 발생한 직후 배열 A를 출력합니다.
크기 N의 배열에 대한 선택 정렬 의사 코드는 다음과 같습니다.
selection_sort(A(1..N)) { # A(1..N)을 오름차순 정렬한다.
for last <- N downto 2 {
A(1..last)중 가장 큰 수 A(i)를 찾는다
if (last !
= i) then A(last) <-> A(i) # last와 i가 서로 다르면 A(last)와 A(i)를 교환
}
}
기입
첫 번째 줄은 배열 A의 크기 N(5 ≤ N ≤ 10,000)과 교환 횟수 K(1 ≤ K ≤ N)를 제공합니다.
다른 배열 A의 요소 A1, A2, …, AN은 다음 줄에 지정됩니다.
(1 ≤ AI ≤ 10^9)
누르다
라인에서 K 교환이 발생한 직후 배열 A를 반환합니다.
교환 횟수가 K보다 작으면 -1을 반환합니다.
설명
2023.03.26 – (알고리즘/백준) – 백준 23881 알고리즘 클래스 – 선택정렬 1 JAVA
백준 23881 알고리즘 레슨 – 정렬 선택 1 JAVA
23881: 알고리즘 클래스 – 선택 정렬 1 배열 A의 크기 N(5 ≤ N ≤ 10,000)과 순열 개수 K(1 ≤ K ≤ N)가 첫 번째 줄에 지정됩니다.
다른 배열 A의 요소 A1, A2, …, AN은 다음 줄에 지정됩니다.
(1 ≤ Ai ≤ 109) www.a
hunucho.tistory.com
위의 문제와 마찬가지로 교환 횟수를 세는 것이 문제입니다.
그러나 유일한 차이점은 만족스러운 교환의 수를 찾으면 현재 상태가 부여된다는 것입니다.
암호
import java.io.*;
import java.util.*;
public class Main {
public static void main(String() args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
int n=Integer.parseInt(st.nextToken()), k=Integer.parseInt(st.nextToken()), cnt=0;
int () A = new int(n);
st = new StringTokenizer(br.readLine());
for(int i=0;i<n;i++)
A(i)=Integer.parseInt(st.nextToken());
for(int i=n-1;i>=0;i--) {
int max=0, idx=0;
for(int j=0;j<i;j++) {
if(max<A(j)) {
max=A(j);
idx=j;
}
}
if(A(i)<A(idx)) {
int temp = A(i);
A(i)=A(idx);
A(idx)=temp;
cnt++;
}
if(cnt==k)
break;
}
if(cnt<k)
System.out.println(-1);
else {
for(int i=0;i<n;i++)
sb.append(A(i)+" ");
System.out.println(sb.toString());
}
}
}