https://www.acmicpc.net/problem/1427
문제
배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자.
문제 접근 / 풀이 과정
문제에서 이미 풀이방법을 던져주었다. "각 자리수를 내림차순으로 정렬"
바로 코드로 옮겨보자.
import java.io.*;
import java.util.ArrayList;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(bf.readLine());
ArrayList<Integer> array = new ArrayList<>();
// ArrayList에 10을 나눈 나머지를 반복해서 넣는다
// sum은 입력값에서 10을 계속 나눠준다
int sum = N;
while( sum / 10 != 0)
{
array.add(sum%10);
sum /= 10;
}
array.add(sum);
//새로운 배열만들기 , 카운트 정렬
int[] count = new int[10];
for (int i = 0; i < array.size(); i++) {
count[array.get(i)]++;
}
// 출력
for (int i = 9; i >= 0; i--)
{
for (int j = 0; j < count[i]; j++)
{
if(count[i] == 0)
break;
else
bw.write(i + "");
}
}
bw.flush();
}
}
본 문제를 두 가지 방법으로 풀어보았다.
하나는 위의 코드인데, 바로 이전 문제에서 사용하였던 카운트정렬과 비슷한 방법을 사용하였고, 다른 하나는 버블 정렬을 사용하였다.
느낀점
슬슬 프로그래밍 언어의 주요 문법 알고리즘을 벗어나서 다양한 자료구조와 알고리즘의 세계로 들어가는 것 같다.
여러가지 자료구조와 알고리즘을 공부하여 다양한 곳에 활용하고 싶다.