문제 출처 - http://jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=426&sca=2070
문제
선택 정렬(selection sort)이란 내부정렬 알고리즘의 하나로 다음 순서대로 실행하여 정렬을 한다.
1. 주어진 수열 중에 최소값(같은 값이 여러 개 있는 경우 처음 값)을 찾는다.
2. 찾은 최소값을 맨 앞의 값과 자리를 바꾼다.
3. 맨 앞의 값을 뺀 나머지 수열을 같은 방법으로 전체 개수-1번 반복 실행한다.
n개의 주어진 수열을 위와 같은 방법으로 정렬한다.
수열이 주어지면 선택정렬의 과정을 한 단계씩 출력한다.
입력형식
첫줄에 수열의 길이 N(4≤N≤100)이 주어진다. 두 번째 줄에 N개의 0이상 100이하의 정수가 주어진다.
출력형식
처음 상태를 제외하고 정렬과정의 각 단계별 결과를 "출력형식"과 같이 출력한다.
코드
import java.util.Scanner;
public class JO1146_선택정렬 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int arr[] = new int [N];
for (int i = 0; i < N; i++) {
arr[i] = sc.nextInt();
}
int mn = 2147000000;
int tmp = 0;
int d = 0;
for (int i = 0; i < N - 1; i++) {
mn = 2147000000;
for (int j = i; j < N; j++) {
if(arr[j] < mn) {
mn = arr[j];
d = j;
}
}
tmp = arr[i];
arr[i] = mn;
arr[d] = tmp;
for (int j = 0; j < N; j++){
System.out.print(arr[j] + " ");
}
System.out.println();
}
}
}
정렬 알고리즘은 이름이 정말 헷갈리는 것 같다.. 선택 정렬 삽입 정렬 이런거 이름 다 너무 헷갈려
아무튼 정렬 알고리즘을 직접 구현해보는 문제를 풀어보는 것도 좋은 것 같다. 기본적인 알고리즘이지만 직접 코드를 짜보는 것과 눈으로 훑으면서 아 알겠다 하고 넘어가는 것은 다르기 때문이다. 또 이렇게 직접 구현해보면 기억에 좀 더 오래 남을지도?
'알고리즘 문제 풀이' 카테고리의 다른 글
백준 1427 소트인사이드 (JAVA 자바) (0) | 2021.06.30 |
---|---|
정올 2809 약수 (JAVA 자바) (0) | 2021.06.27 |
정올 1516 단어 세기 (JAVA 자바) (0) | 2021.06.21 |
백준 16922 로마 숫자 만들기 (JAVA 자바) (0) | 2021.06.13 |
백준 1789 수들의 합 (JAVA 자바) (0) | 2021.06.12 |