카테고리 없음
백준 23968 : 알고리즘 수업 버블 정렬 1
Fel.Forest
2025. 5. 29. 09:27
출처 : https://www.acmicpc.net/problem/23968
문제
오늘도 서준이는 버블 정렬 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.
N개의 서로 다른 양의 정수가 저장된 배열 A가 있다. 버블 정렬로 배열 A를 오름차순 정렬할 경우 K 번째 교환되는 수를 구해서 우리 서준이를 도와주자.
크기가 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] # 원소 교환
}
생각
- 버블 정렬 다 해야하는건가..
- k 값을 하고 하나 스왑할때마다 횟수 카운트 해서 그 카운트 나오면 종료하는 식으로
- k 값이 교환 횟수보다 크면 -1 출력
코드
#include <iostream>
#include <vector>
using namespace std;
int main()
{
// 입력값이 10000 이여서 입력으로 시간 초가 날거 같지는 않음
int n, k;
cin >> n >> k;
vector<int> nums(n, 0);
for(int ix = 0; ix < n; ++ix)
{
cin >> nums[ix];
}
// 횟수
int count = 0;
for(int ix= 1; ix < n; ++ix)
{
for(int jx = 0; jx < n - ix; ++jx)
{
if(nums[jx] > nums[jx+1])
{
swap(nums[jx], nums[jx+1]);
count++;
if(count == k)
{
cout << nums[jx] << " " << nums[jx+1];
return 0;
}
}
}
}
cout << -1;
}
결과
- 문제 풀이 시간 : 5분
- 메모리 : 2020 KB
- 시간 : 144 ms
배운점 및 고칠점
- 스왑하는거 인지 잘하자