본문 바로가기
Algorithm/Baekjoon

[백준 알고리즘][자바] 1427번 : 소트인사이드

by hyunipad 2022. 6. 15.
반응형

https://www.acmicpc.net/problem/1427

 

1427번: 소트인사이드

첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net

 

이번 문제는 개행되어서 숫자가 주어지는 것이 아닌, 한 번에 숫자가 주어지고 각 자릿수를 뽑아내서 정렬을 해야 하는 문제입니다.

다양한 정렬을 사용하여 문제를 해결할 수 있는데 이번 포스팅에서는 이때까지 많이 사용했던 카운팅 정렬과 Arrays.sort()를 사용해서 해결해보겠습니다.

2022.05.07 - [Algorithm/Theory] - [Java] Counting Sort(카운팅 정렬)

 

[Java] Counting Sort(카운팅 정렬)

Counting Sort는 일반적인 정렬 알고리즘과 달리 데이터를 서로 비교하지 않고, 데이터의 값을 카운팅 하여 정렬하는 알고리즘입니다. 시간 복잡도는 O(n)인데, 빠른 정렬 알고리즘으로 알려져 있는

hyunipad.tistory.com

 

 

풀이

1. 카운팅 정렬을 사용

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int N = Integer.parseInt(br.readLine());
		int[] N_array = new int[10];
		
		while(N != 0) {
			N_array[N % 10]++;
			N = N/10;
		}
		
		int i = 9;
		while(i >= 0) {
			if(N_array[i] != 0) {
				N_array[i]--;
				bw.write(String.valueOf(i));
				i = 9;
			}else {
				i--;
			}
		}
		
		br.close();
		bw.flush();
		bw.close();
	}
}

 

이번 문제에서 그나마 생각해야할 요인은 자릿수를 어떻게 뽑아내느냐인데, 나머지 연산과 나눗셈 연산을 사용하여 카운팅 배열에 바로바로 카운트해줍니다.

 

2. Arrays.sort()를 사용

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		String N = br.readLine();
		char[] N_char = N.toCharArray();
		
		Arrays.sort(N_char);
		
		for(int i = N_char.length - 1 ; i >= 0 ; i--) {
			bw.write(N_char[i]);
		}
		
		br.close();
		bw.flush();
		bw.close();
	}
}

 

Arrays.sort()를 사용했을 때는 수학적인 연산도 필요 없이 해결할 수 있습니다.

 

아래에서부터 순서대로

  1. 카운팅 정렬 사용
  2. Arrays.sort() 사용

입니다. 정답이라도 다양한 방법을 시도해보는 것이 재미도 있고 좋은거 같습니다.

반응형

댓글