✔ 소트인사이드
문제 분석하기
숫자를 각 자릿수별로 나누는 작업이 필요하므로 입력값을 String으로 받은 후
substring() 함수를 이용해 자릿수 단위로 분리하고, 이를 다시 int형으로 변경해 배열에 저장하도록 함
이후 N의 길이가 크지 않으므로 선택 정렬 알고리즘을 이용해 해결
손으로 풀어보기
- String 변수로 정렬할 데이터를 받은 후 substring() 함수를 사용해 각 자릿수별로 나눈 후 int형 배열에 저장
- 배열의 데이터를 선택 정렬 알고리즘을 이용해 최댓값을 찾아 swap하며 내림차순 정렬
슈도코드 작성하기
str(정렬할 수)
A(자릿수별로 구분해 저장한 배열)
for(str의 길이만큼 반복하기) {
A 배열 저장 → str.substring 사용하기
}
for(i: 0 ~ str의 길이만큼 반복하기) {
for(j: i + 1 ~ str의 길이만큼 반복하기) {
현재 범위에서 Max값 찾기
}
현재 i의 값과 Max값 중 Max값이 더 크면 swap 수행하기
}
A 배열 출력하기
코드 구현하기
/**
* 1427) 소트인사이드
*/
public class D017_1427 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// str(정렬할 수)
String str = sc.next();
// A(자릿수별로 구분해 저장한 배열)
int[] A = new int[str.length()];
// str의 길이만큼 반복하기
for (int i = 0; i < str.length(); i++) {
// A 배열 저장 → str.substring 사용하기
A[i] = Integer.parseInt(str.substring(i, i + 1));
}
// 0 ~ str의 길이만큼 반복하기
for (int i = 0; i < str.length(); i++) {
int Max = i;
// i + 1 ~ str의 길이만큼 반복하기
for (int j = i + 1; j < str.length(); j++) {
// 현재 범위에서 Max값 찾기
// 내림차순이므로 최댓값을 찾음
if (A[j] > A[Max]) {
Max = j;
}
}
// 현재 i의 값과 Max값 중 Max값이 더 크면 swap 수행하기
if (A[i] < A[Max]) {
int temp = A[i];
A[i] = A[Max];
A[Max] = temp;
}
}
// A 배열 출력하기
for (int i = 0; i < str.length(); i++) {
System.out.print(A[i]);
}
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[2178] 미로 탐색 (0) | 2023.07.03 |
---|---|
[11724] 연결 요소의 개수 (0) | 2023.07.03 |
[2750] 수 정렬하기 (0) | 2023.06.30 |
[2164] 카드2 (0) | 2023.06.29 |
[1874] 스택 수열 (0) | 2023.06.29 |