본문 바로가기

백준 알고리즘

2019.02.11 ~ 2019.02.17

● 백준 단계별 풀어보기

: 2019.02.11 ~ 2019.02.17 기간동안 단계별 풀어보기를 진행하고 그 중 '수정렬하기-3'를 정리한다.



문제

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

입력

첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.

출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

예제 입력 1 

10
5
2
3
1
4
2
3
5
1
7

예제 출력 1 

1
1
2
2
3
3
4
5
5
7













































* 해당 문제는 counting sort 를 이용해서 문제를 해결했다.

** counting sort 

배열 N : [5,2,3,1,4,2,3,5,1,7];

카운드 : [0,2,2,2,1,2,0,1]

누적 : [0,2,4,6,7,9,9,10]    <<     해당 누적값은 정렬시 위치를 찾는 역할을 한다.

즉, 0 번은 0번부터 0번에 위치

1은 0 부터 2 사이에 위치

2는 2 부터 4 사이에 위치 ....


정렬 N : [1,1,2,2,3,3,4,5,5,7]


참고 : https://yaboong.github.io/algorithms/2018/03/20/counting-sort/




import java.io.OutputStreamWriter;import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;


public class Main {

public static void main(String[] args) throws NumberFormatException, IOException {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

int t_case  = Integer.parseInt(br.readLine());

int[] sort = new int[t_case];


for(int i = 0 ; i < t_case ; i++) {

sort[i] = Integer.parseInt(br.readLine());

}

sort = countSorting(sort);

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

for(int j = 0 ; j < sort.length ; j++) {

bw.write(Integer.toString(sort[j])+"\n");

}

br.close();

bw.close();

}

  // couning sort 

public static int[] countSorting(int[] sort) {

int max = 0;

for(int i = 0 ; i < sort.length ; i++) {

if(max < sort[i]) max = sort[i];   

}

int[] result = new int[sort.length];    // 정렬 후 배열

int[] temp = new int[max+1];        // 누적값을 위한 배열

for(int j = 0 ; j < sort.length ; j++) {    // 기존 배열 카운팅

temp[sort[j]]++;

}

for(int k = 1 ; k <temp.length; k++) {    // 누적값 입력

temp[k] += temp[k-1];

}

for(int q = sort.length-1 ; q>=0 ; q--) {

result[--temp[sort[q]]]= sort[q];

}

return result;

}

}






















'백준 알고리즘' 카테고리의 다른 글

2019.02.25 ~ 2019.03.31  (0) 2019.03.31