백준 알고리즘 수업 - 버블 정렬 1

KIMYEONGJUN·2025년 2월 6일
0
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫째 줄에 배열 A의 크기 N(5 ≤ N ≤ 10,000), 교환 횟수 K(1 ≤ K ≤ N^2)가 주어진다.
다음 줄에 서로 다른 배열 A의 원소 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 10^9)

K 번째 교환되는 두 개의 수를 작은 수부터 한 줄에 출력한다. 교환 횟수가 K 보다 작으면 -1을 출력한다.

내가 이 문제를 보고 생각해본 부분

입력 처리: BufferedReader를 사용하여 입력 받는다.
배열 초기화: 주어진 배열 크기와 원소를 읽어서 배열 A를 초기화한다.
버블 정렬: 버블 정렬 알고리즘을 구현하여 배열을 정렬하며, 교환이 발생할 때마다 카운트를 증가시킨다.
K번째 교환 확인: 교환 횟수가 K에 도달하면 해당 교환된 두 값을 저장한다.
결과 출력: K번째 교환이 발생했는지 확인하고, 결과를 출력한다.

코드로 구현

package baekjoon.baekjoon_26;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

// 백준 23968번 문제
public class Main925 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 배열 크기 N과 K를 입력받음
        String[] firstLine = br.readLine().split(" ");
        int N = Integer.parseInt(firstLine[0]);
        int K = Integer.parseInt(firstLine[1]);

        // 배열 A를 입력받음
        String[] arrayString = br.readLine().split(" ");
        int[] A = new int[N];
        for(int i = 0; i < N; i++) {
            A[i] = Integer.parseInt(arrayString[i]);
        }

        // 교환 횟수
        int swapCount = 0;
        int kthSwapX = -1;
        int kthSwapY = -1;

        // 버블 정렬
        for(int last = N; last > 1; last--) {
            for(int i = 0; i < last - 1; i++) {
                if(A[i] > A[i + 1]) {
                    // 원소 교환
                    int temp = A[i];
                    A[i] = A[i + 1];
                    A[i + 1] = temp;

                    // 교환 횟수 증가
                    swapCount++;

                    // K번째 교환이면 값 저장
                    if(swapCount == K) {
                        kthSwapX = Math.min(A[i], A[i + 1]);
                        kthSwapY = Math.max(A[i], A[i + 1]);
                    }
                }
            }
        }

        // 결과 출력
        if(swapCount >= K) {
            System.out.println(kthSwapX + " " + kthSwapY);
        } else {
            System.out.println(-1);
        }

        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글

관련 채용 정보