[Java] Boj 23969: 알고리즘 수업 - 버블 정렬 2

2025. 3. 10. 12:26·PS/Solve

문제

오늘도 서준이는 버블 정렬 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.

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;
                    }
 
                }
            }
        }
    }
}
Colored by Color Scripter
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
'PS/Solve' 카테고리의 다른 글
  • [Java] Boj 23882: 알고리즘 수업 - 선택 정렬 2
  • [Java] Boj 23881: 알고리즘 수업 - 선택 정렬 1
  • [Java] Boj 23968: 알고리즘 수업 - 버블 정렬 1
  • [Java] Boj 13417: 카드 문자열
hyeon0117
hyeon0117
컴공으로 살아남기
  • hyeon0117
    컴공 생활기
    hyeon0117
  • 전체
    오늘
    어제
    • 분류 전체보기 (36) N
      • Algorithm (2)
      • PS (15)
        • Solve (15)
      • CS (19) N
        • 객체지향설계 & 패턴 (12)
        • COLMAP (2) N
        • 머신러닝 (1)
        • 프로그래밍 언어론 (4) N
        • 형식언어 (0)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    PS
    플로이드 - 워셜
    백준
    BOJ
    백준 23881
    백준 11899
    백준13417
    플로이드 워셜 알고리즘
    알고리즘
    백준 10867
    백준 6825
    누적 합 알고리즘
    백준 11659
    soild 패턴
    디자인패턴
    Colmap
    백준 24051
    객체지향
    선택 정렬
    백준 23969
    백준1531
    자료구조
    다이나믹 프로그래밍
    플로이드-워셜 알고리즘
    백준23882
    디자인 패턴
    객체지향설계
    최단 경로
    백준 11006
    백준1895
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
hyeon0117
[Java] Boj 23969: 알고리즘 수업 - 버블 정렬 2
상단으로

티스토리툴바