지구정복

[정렬] 백준 - 수 정렬하기 3 본문

데이터 엔지니어링 정복/Algorithm

[정렬] 백준 - 수 정렬하기 3

nooh._.jl 2021. 7. 26. 21:57
728x90
반응형

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

 

10989번: 수 정렬하기 3

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

www.acmicpc.net

 

-문제해설

Arrays.sort로 절대 풀 수 없다.

입력받는 값을 배열 인덱스로 설정하고 해당 인덱스의 값을 1씩 증가시켜줘야한다.

만약 중복되는 값 1이 세 번 입력된다면  arr[1] = 3이된다.

 

답을 출력할 때는 3이 0이 될 때까지 해당 인덱스 값을 계속 출력한다.

3 -> 1 출력

2 -> 1 출력

1 -> 1 출력

0

 

 

-자바

package sort;

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

public class BJ10989 {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt( br.readLine() );
		int[] arr = new int[10_001];
		
		for( int i=0; i<n; i++ ) arr[ Integer.parseInt(br.readLine()) ]++;
		
		StringBuffer sb = new StringBuffer();
		for( int i=0; i<arr.length; i++ ) {
			if( arr[i] != 0 ) {
				for( int j=arr[i]; j>0; j-- ) sb.append( i + "\n" );
			}
		}
		System.out.println( sb );
	}
}

 

-파이썬

import sys
readline = sys.stdin.readline

def main():
    n = int( readline() )
    arr = [ 0 for _ in range( 10001 ) ]
    
    for _ in range( n ):
        arr[ int(readline()) ] += 1
        
    for i in range( len(arr) ):
        for j in range( arr[i] ):
            print( i )
            
if __name__ == '__main__':
    main()
728x90
반응형
Comments