문제 정보
- 문제 링크: https://www.acmicpc.net/problem/1427
- 문제 번호: 1427번
- 문제 이름: 스택
- 문제 난이도: 실버 5
1427번: 소트인사이드
첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.
www.acmicpc.net
코드
import java.io.*;
import java.util.*;
public class 백준_1427_소트인사이드 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] sArray = br.readLine().split("");
int[] nArray = new int[sArray.length];
for(int i = 0; i < sArray.length; i++) {
nArray[i] = Integer.parseInt(sArray[i]);
}
for(int i = 0; i < nArray.length - 1; i++) {
int befPos = i;
int chgPos = i;
int maxValue = nArray[i];
for(int j = i + 1; j < nArray.length; j++) {
if(maxValue < nArray[j]) {
maxValue = nArray[j];
chgPos = j;
}
}
if(befPos != chgPos) {
int temp = nArray[befPos];
nArray[befPos] = nArray[chgPos];
nArray[chgPos] = temp;
}
}
for(int index : nArray) {
System.out.print(index);
}
}
}
풀이
Step1: 입력 처리 및 초기화
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] sArray = br.readLine().split("");
int[] nArray = new int[sArray.length];
for(int i = 0; i < sArray.length; i++) {
nArray[i] = Integer.parseInt(sArray[i]);
}
- `BufferedReader`를 사용하여 입력을 받습니다.
- 문자열을 입력받은 후, 각 문자를 하나씩 나누어 `sArray`배열에 저장합니다.
- `nArray`배열을 선언하여 문자열을 정수로 변환하여 저장합니다.
Step2: 선택 정렬을 통한 내림차순 정렬
for(int i = 0; i < nArray.length - 1; i++) {
int befPos = i;
int chgPos = i;
int maxValue = nArray[i];
for(int j = i + 1; j < nArray.length; j++) {
if(maxValue < nArray[j]) {
maxValue = nArray[j];
chgPos = j;
}
}
if(befPos != chgPos) {
int temp = nArray[befPos];
nArray[befPos] = nArray[chgPos];
nArray[chgPos] = temp;
}
}
- 선택 정렬 알고리즘을 사용하여 배열을 내림차순으로 정렬합니다.
- `i`를 0부터 시작하여 `nArray`배열의 길이 -1까지 반복합니다. 이는 정렬의 범위를 나타냅니다.
- `befPos`변수를 사용하여 현재 비교하는 요소의 위치를 저장합니다.
- `chgPos`변수를 사용하여 최대값을 가진 요소의 위치를 저장합니다.
- `maxValue`는 최댓 값을 저장하기 위한 변수로 초기 값으로 현재 요소의 값 `nArray[i]`로 설정합니다.
- 두 번째 반복문에서 `j`를 `i+1`부터 시작하여 `nArray`배열의 길이만큼 반복문 합니다. 이는 정렬 범위 내에서 최대 값을 찾기 위한 탐색을 의미합니다.
- `maxValue`와 `nArray[j]`를 비교하여 `maxValue`보다 큰 값을 발견하면 `maxValue`와 `chgPos`를 갱신합니다.
- 한 번의 탐색이 끝나면 `befPos`와 `chgPos`를 비교하여 위치가 다르면 두 위치에 해당하는 배열의 요소를 교환합니다.
Step3: 정렬된 결과 출력
for (int index : nArray) {
System.out.print(index);
}
- 정렬된 결과를 출력합니다. `nArray`배열의 요소를 순서대로 출력합니다.
'Algorithm > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘 / JAVA] 11286번 절댓값 힙 (0) | 2023.07.03 |
---|---|
[백준 알고리즘 / JAVA] 2750번 수 정렬하기 (0) | 2023.07.02 |
[백준 알고리즘 / JAVA] 2178번 미로탐색 (0) | 2023.07.01 |
[백준 알고리즘 / JAVA] 11724번 연결 요소의 개수 (0) | 2023.06.28 |
[백준 알고리즘 / JAVA] 9093번 단어 뒤집기 (0) | 2023.06.27 |