안녕하세요, 작가 J입니다. 이번에는 5개의 정수를 입력받아 오름차순으로 정렬하여 출력하는 프로그램을 구현해 보겠습니다. 이 예제는 정렬 알고리즘의 기초를 배우는 데 도움이 됩니다. 우리는 버블 정렬, 선택 정렬, 그리고 Arrays.sort를 사용하여 문제를 해결해 보겠습니다.
[Java Festival Bonus05] 정수 오름차순 정렬하기
5개의 정수를 입력 받아
오름차순 정렬하여 출력하는 프로그램을 구현하시오.
코드 풀이
코드 풀이 1: 버블 정렬을 사용한 방식
package Bonus;
import java.util.Scanner;
public class Bonus05 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] num = new int[5];
// 사용자로부터 5개의 정수를 입력받기
for (int i = 0; i < num.length; i++) {
System.out.print((i + 1) + "번째 수 입력 : ");
num[i] = sc.nextInt();
}
// 버블 정렬을 사용하여 배열을 오름차순으로 정렬
for (int i = 0; i < num.length - 1; i++) { // 배열의 크기-1 만큼 반복
for (int j = 0; j < num.length - 1 - i; j++) { // 인접한 두 요소 비교
if (num[j] > num[j + 1]) { // 현재 요소가 다음 요소보다 크면
int temp = num[j]; // 두 요소를 교환
num[j] = num[j + 1];
num[j + 1] = temp;
}
}
}
// 정렬된 배열 출력
System.out.print("정렬 후\n");
for (int i : num) {
System.out.print(i + " ");
}
}
}
1. 사용자 입력받기
- Scanner sc = new Scanner(System.in);: 사용자 입력을 받기 위해 Scanner 객체를 생성합니다.
- int[] num = new int[5];: 5개의 정수를 저장할 배열을 선언합니다.
- for (int i = 0; i < num.length; i++) { ... }: 사용자로부터 5개의 정수를 입력받아 배열에 저장합니다.
2. 버블 정렬을 사용하여 배열을 오름차순으로 정렬
- for (int i = 0; i < num.length - 1; i++) { ... }: 외부 반복문은 배열의 크기-1만큼 반복합니다.
- for (int j = 0; j < num.length - 1 - i; j++) { ... }: 내부 반복문은 인접한 두 요소를 비교하여, 더 큰 요소를 뒤로 보냅니다.
- if (num[j] > num[j + 1]) { ... }: 현재 요소가 다음 요소보다 크면 두 요소를 교환합니다.
3. 정렬된 배열 출력
- for (int i : num) { ... }: 정렬된 배열을 출력합니다.
버블 정렬 (Bubble Sort)
버블 정렬은 인접한 두 요소를 비교하여 더 큰 요소를 뒤로 보내는 과정을 반복하여 배열을 정렬하는 방법입니다. 배열의 크기만큼 반복하며, 각 반복마다 가장 큰 요소가 끝으로 이동합니다.
코드 풀이 2 : 선택 정렬을 사용한 방식
package Bonus;
import java.util.Scanner;
public class Bonus05SelectionSort {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] num = new int[5];
// 사용자로부터 5개의 정수를 입력받기
for (int i = 0; i < num.length; i++) {
System.out.print((i + 1) + "번째 수 입력 : ");
num[i] = sc.nextInt();
}
// 선택 정렬을 사용하여 배열을 오름차순으로 정렬
for (int i = 0; i < num.length - 1; i++) { // 배열의 크기-1 만큼 반복
int minIndex = i; // 현재 최소값의 인덱스를 저장
for (int j = i + 1; j < num.length; j++) { // 현재 최소값보다 작은 요소 찾기
if (num[j] < num[minIndex]) {
minIndex = j; // 더 작은 요소의 인덱스를 업데이트
}
}
int temp = num[minIndex]; // 두 요소를 교환하여 최소값을 앞쪽에 위치
num[minIndex] = num[i];
num[i] = temp;
}
// 정렬된 배열 출력
System.out.print("정렬 후\n");
for (int i : num) {
System.out.print(i + " ");
}
}
}
1. 선택 정렬을 사용하여 배열을 오름차순으로 정렬
- for (int i = 0; i < num.length - 1; i++) { ... }: 외부 반복문은 배열의 크기-1만큼 반복합니다.
- int minIndex = i;: 현재 최소값의 인덱스를 저장합니다.
- for (int j = i + 1; j < num.length; j++) { ... }: 내부 반복문은 현재 최소값보다 작은 요소를 찾습니다.
- if (num[j] < num[minIndex]) { ... }: 더 작은 요소를 찾으면 최소값의 인덱스를 업데이트합니다.
- 두 요소를 교환하여 최소값을 배열의 앞쪽에 위치시킵니다.
선택 정렬 (Selection Sort)
선택 정렬은 배열에서 가장 작은 요소를 찾아 첫 번째 요소와 교환하고, 다음으로 작은 요소를 찾아 두 번째 요소와 교환하는 과정을 반복하여 배열을 정렬하는 방법입니다.
코드 풀이 3 : Arrays.sort를 사용한 방식
package Bonus;
import java.util.Arrays;
import java.util.Scanner;
public class Bonus05ArraySort {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] num = new int[5];
// 사용자로부터 5개의 정수를 입력받기
for (int i = 0; i < num.length; i++) {
System.out.print((i + 1) + "번째 수 입력 : ");
num[i] = sc.nextInt();
}
// Arrays.sort를 사용하여 배열을 오름차순으로 정렬
Arrays.sort(num);
// 정렬된 배열 출력
System.out.print("정렬 후\n");
for (int i : num) {
System.out.print(i + " ");
}
}
}
1. Arrays.sort를 사용하여 배열을 오름차순으로 정렬
- Arrays.sort(num);: 배열을 오름차순으로 정렬합니다.
- Arrays.sort()는 자바에서 제공하는 정렬 함수로, 배열을 빠르게 정렬해 주는 매우 유용한 메서드입니다. 이 함수는 퀵 정렬, 합병 정렬, 팀소트(TimSort) 알고리즘을 사용하여 매우 효율적으로 정렬합니다.
마무리
이번 예제에서는 5개의 정수를 입력받아 오름차순으로 정렬하는 세 가지 방법을 다뤄보았습니다. 각 방법의 효율성을 고려하여 설명하겠습니다.
- Arrays.sort(): 가장 효율적인 방법으로, 팀소트(TimSort) 알고리즘을 사용하여 매우 빠르게 배열을 정렬합니다. 대부분의 경우 이 방법을 사용하는 것이 좋습니다.
- 선택 정렬 (Selection Sort): 단순하고 이해하기 쉬운 정렬 방법이지만, 효율성은 떨어집니다. 배열의 크기가 작을 때 사용하기 적합합니다.
- 버블 정렬 (Bubble Sort): 가장 비효율적인 정렬 방법 중 하나입니다. 단순한 구현이 가능하지만, 배열의 크기가 커지면 성능이 급격히 저하됩니다.
프로그래밍을 시작하는 모든 분께 이 예제가 도움이 되길 바랍니다. 앞으로도 다양한 유형의 문제를 통해 여러분의 학습을 도울 수 있도록 노력하겠습니다. 감사합니다!
'프로그래밍 기초 > Java Festival' 카테고리의 다른 글
[Java Festival] 24. N개의 숫자 중 X보다 작은 수만 출력하기 (0) | 2024.07.04 |
---|---|
[Java Festival] 23. 2차원 배열 왼쪽으로 90도 회전하기 (0) | 2024.07.04 |
[Java Festival] 22. 계단식 별 출력하기 (0) | 2024.07.04 |
[Java Festival] 21. 두 숫자 사이의 최소 거리를 찾기 (0) | 2024.07.04 |
[Java Festival] 20. 10진수 정수를 2진수로 변환하기 (0) | 2024.06.30 |