<문제 제시>
<문제설명>
배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자.
<예시 입출력>
<문제 해결 과정>
문제에서도 말했듯 배열을 정렬하는 것은 Arrays.sort() 메서드 사용이나, 변수사용으로 for문을 통해 정렬하는 방법 등 쉬울 수 있지만, 숫자가 주어지면 그 숫자를 각 토큰으로 판단하여 내림차순 정렬한 값을 반환해야한다.
Answer 1)
for(int i = 0; i < N.length(); i++) {
sort[i] = N.charAt(i) - '0';
}
Integer[] temp = Arrays.stream(sort).boxed().toArray(Integer[]::new);
Arrays.sort(temp, Collections.reverseOrder());
String answer = "";
for(int i = 0; i < temp.length; i++) {
answer += Integer.toString(temp[i]);
}
주어진 숫자는 문자열로 주어지기 때문에 N.length()로 길이를 판단하고, 그 길이만큼 sort 배열을 선언한다.
sort에 N.charAt(i) - '0'의 값을 넣는다. (아스키코드를 활용)
문자열4123 일 경우 4 1 2 3이 숫자로 저장된다.
또한 입력값으로 매우 큰 수가 입력될 수 있기때문에 정렬을 위해서 Integer형으로 배열을 선언한다.
stream() 으로 배열을 다루고,
boxed() : 원시타입을 클래스타입으로 바꾼다.
toArray() : Integer[] 배열 형태로 temp에 저장한다.
Integer[] 형의 배열 temp를 내림차순 정렬한다.
answer에 누적하여 문자열로 반환한다.
<전체코드>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String N = br.readLine();
int[] sort = new int[N.length()];
for(int i = 0; i < N.length(); i++) {
sort[i] = N.charAt(i) - '0';
}
Integer[] temp = Arrays.stream(sort).boxed().toArray(Integer[]::new);
Arrays.sort(temp, Collections.reverseOrder());
String answer = "";
for(int i = 0; i < temp.length; i++) {
answer += Integer.toString(temp[i]);
}
System.out.println(answer);
}
}
charAt() - '0' 부분처럼 아스키코드를 통해 문자열의 특정 문자를 정수형으로 바꿔 저장할 수 있었다.
큰 값의 데이터를 배열 처리하기 위해 Integer[] 형으로 선언한 배열과 stream()클래스를 통해 boxed(), toArray()로 접근하는 부분 등 공부할 것이 많았다.
문제링크)
https://www.acmicpc.net/problem/1427
1427번: 소트인사이드
첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.
www.acmicpc.net
'Algorithms > 백준' 카테고리의 다른 글
[백준] '나이순 정렬' - Java (0) | 2023.07.15 |
---|---|
[백준] '단어 정렬' - Java (0) | 2023.07.15 |
[백준] '골드바흐의 추측' - Java (0) | 2023.05.19 |
[백준] '과제 안 내신 분..?' - Java (0) | 2023.05.18 |
[백준] 2480번 '주사위 세개' - Java (0) | 2022.09.05 |