문제
오늘도 서준이는 버블 정렬 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.
N개의 서로 다른 양의 정수가 저장된 배열 A가 있다. 버블 정렬로 배열 A를 오름차순 정렬할 경우 K 번 교환이 발생한 직후의 배열 A를 출력해 보자.
크기가 N인 배열에 대한 버블 정렬 의사 코드는 다음과 같다.
bubble_sort(A[1..N]) { # A[1..N]을 오름차순 정렬한다.
for last <- N downto 2
for i <- 1 to last - 1
if (A[i] > A[i + 1]) then A[i] <-> A[i + 1] # 원소 교환
}
입력
첫째 줄에 배열 A의 크기 N(5 ≤ N ≤ 10,000), 교환 횟수 K(1 ≤ K ≤ N2)가 주어진다.
다음 줄에 서로 다른 배열 A의 원소 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 109)
출력
K 번 교환이 발생한 직후의 배열 A를 한 줄에 출력한다. 교환 횟수가 K 보다 작으면 -1을 출력한다.
예제 입력 1
6 10
4 6 5 1 3 2
예제 출력 1
1 3 2 4 5 6
4 6 5 1 3 2 -> 4 5 6 1 3 2 -> 4 5 1 6 3 2 -> 4 5 1 3 6 2 -> 4 5 1 3 2 6 -> 4 1 5 3 2 6 -> 4 1 3 5 2 6 -> 4 1 3 2 5 6 -> 1 4 3 2 5 6 -> 1 3 4 2 5 6 -> 1 3 2 4 5 6 -> 1 2 3 4 5 6. 총 11회 교환이 발생하고 열 번째 교환 직후 배열 A의 모습은 1 3 2 4 5 6이다.
예제 입력 2
6 12
4 6 5 1 3 2
예제 출력 2
-1
교환 횟수 11이 K 보다 작으므로 -1을 출력한다.
풀이
앞전 풀었던 23968번 문제와 유사한 문제로 이번에는 특정 횟수만큼 정렬이 진행되었을 때의 정렬 진행 상황을 출력해야 한다. 버블 정렬의 간단한 개념은 아래를...
https://hyeon0117.tistory.com/11
[Java] Boj 23968: 알고리즘 수업 - 버블 정렬 1
문제오늘도 서준이는 버블 정렬 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.N개의 서로 다른 양의 정수가 저장된 배열 A가 있다. 버블
hyeon0117.tistory.com
교환을 수행할 때마다 교환 횟수를 count하고, 교환 횟수가 k와 동일해지면 버블 정렬을 종료시킨다.
이후, cnt 값과 k값을 비교하여 교환 횟수보다 k가 크면 -1을 출력하고, 아니라면 배열 전체를 출력하여 버블 정렬 진행 상황을 출력한다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static int k;
public static int cnt;
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine());
int size = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
st = new StringTokenizer(bf.readLine());
int[] arr = new int [size];
for (int i=0; i<size; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
bubble_sort(arr);
if (cnt < k) {
System.out.println(-1);
} else {
for (int i=0; i<size; i++) {
System.out.print(arr[i] + " ");
}
}
}
public static void bubble_sort (int[] arr) {
cnt = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - 1; j++) {
int tmp1 = arr[j];
int tmp2 = arr[j+1];
if (tmp1 > tmp2) {
arr[j+1] = tmp1;
arr[j] = tmp2;
cnt++;
if (cnt == k) {
return;
}
}
}
}
}
}
|
cs |
'PS > Solve' 카테고리의 다른 글
[Java] Boj 23882: 알고리즘 수업 - 선택 정렬 2 (0) | 2025.03.11 |
---|---|
[Java] Boj 23881: 알고리즘 수업 - 선택 정렬 1 (0) | 2025.03.10 |
[Java] Boj 23968: 알고리즘 수업 - 버블 정렬 1 (1) | 2025.03.04 |
[Java] Boj 13417: 카드 문자열 (0) | 2025.02.22 |
[Java] Boj 1895: 필터 (0) | 2025.02.22 |