https://www.acmicpc.net/problem/1427
알고리즘 분류 : 문자열, 정렬
❓문제
🔅해석
정렬 알고리즘에는 비교 기반 정렬 알고리즘과 비교하지 않는 정렬 알고리즘이 있다.
해당 문제는 비교 기반 정렬 알고리즘 중 '선택 정렬' 알고리즘을 사용하여 풀이했다.
선택 정렬 알고리즘 순서는 아래와 같다.
1. 남은 정렬 부분에서 최솟값 또는 최댓값을 찾는다.
2. 남은 정렬 부분에서 가장 앞에 있는 데이터와 선택된 데이터를 swap 한다.
3. 가장 앞에 있는 데이터의 위치를 변경해 남은 정렬 부분의 범위를 축소한다.
4. 전체 데이터 크기만큼 index가 커질 때까지, 즉 남은 정렬 부분이 없을 때까지 반복한다.
⭕정답 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
int[] inputs = new int[input.length()];
for (int i = 0; i < input.length(); i++) {
inputs[i] = input.charAt(i) - '0';
}
selectionSort(inputs);
String result = inputsToStr(inputs);
System.out.println(result);
}
private static void selectionSort(int[] inputs) {
int len = inputs.length;
int idx = 0;
// 선택정렬 과정
while (idx < len) { // 4. 전체 데이터 크기만큼 index가 커질 때까지, 즉 남은 정렬 부분이 없을 때까지 반복한다.
int maxIdx = idx;
for (int i = idx; i < len ; i++) {
// 1. 남은 정렬 부분에서 최솟값 또는 최댓값을 찾는다.
if (inputs[maxIdx] < inputs[i]) {
maxIdx = i;
}
}
// 2. 남은 정렬 부분에서 가장 앞에 있는 데이터와 선택된 데이터를 swap 한다.
swap(inputs, idx, maxIdx);
// 3. 가장 앞에 있는 데이터의 위치를 변경해 남은 정렬 부분의 범위를 축소한다.
idx++;
}
}
private static String inputsToStr(int[] inputs) {
StringBuilder sb = new StringBuilder();
for (int val : inputs) {
sb.append(val);
}
return sb.toString();
}
private static void swap(int[] inputs, int idx, int maxIdx) {
int temp = inputs[idx];
inputs[idx] = inputs[maxIdx];
inputs[maxIdx] = temp;
}
}
❗결과
'코딩테스트 > 백준' 카테고리의 다른 글
[코테] 백준 23968번 : 알고리즘 수업 - 버블 정렬 1 (java) (0) | 2024.11.01 |
---|---|
[코테] 백준 2458번 : 키 순서 (java) (0) | 2024.08.16 |
[코테] 백준 11657번 : 타임 머신 (java) (0) | 2024.08.16 |
[코테] 백준 1753번 : 최단경로 (java) (0) | 2024.08.16 |
[코테] 백준 11438번 : LCA 2 (java) (0) | 2024.08.16 |