백준 10989번 수 정렬하기3 BufferedWriter또는 StringBuilder 를 이용하여 출력하는 법 + counting 정렬 vs. Arrays.sort()

byeol·2023년 1월 26일
0
import java.util.*;
import java.io.*;



class Main{		
  public static void main(String[] args) throws IOException{
     BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
     
     int n = Integer.parseInt(br.readLine());
     
     int[] answer = new int[n];
     
     for(int i=0;i<n;i++) 
    	 answer[i]=Integer.parseInt(br.readLine());
     
     
     Arrays.sort(answer);
     
     for(int x : answer)
    	 System.out.println(x);
    
        
  }
}

오마이갓 시간초과가 나온다.
살펴보니 출력에서 많은 시간을 할애하는 거 같았다.
저 부분을 바꿔보도록 하겠다.

방법 1 Arrays.sort()와 StringBuilder 사용

import java.util.*;
import java.io.*;



class Main{		
  public static void main(String[] args) throws IOException{
     BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
     StringBuilder sb = new StringBuilder();
     int n = Integer.parseInt(br.readLine());
     
     int[] answer = new int[n];
     
     for(int i=0;i<n;i++) 
    	 answer[i]=Integer.parseInt(br.readLine());
     
     
     Arrays.sort(answer);
     
     for(int x : answer)
    	 sb.append(x).append('\n');
    
     System.out.println(sb);
        
  }
}

방법 2 Arrays.sort()와 BufferedWriter사용

import java.util.*;
import java.io.*;



class Main{		
  public static void main(String[] args) throws IOException{
     BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
     BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
     int n = Integer.parseInt(br.readLine());
     
     int[] answer = new int[n];
     
     for(int i=0;i<n;i++) 
    	 answer[i]=Integer.parseInt(br.readLine());
     
     
     Arrays.sort(answer);
     
     for(int x : answer)
    	 bw.write(x+"\n");
    
     bw.flush();
     bw.close();
     br.close();
        
  }
}

방법3 counting 정렬 이용하기

import java.util.*;
import java.io.*;



class Main{		
  public static void main(String[] args) throws IOException{
     
	  
	 int[] cnt = new int[10001]; 
	  
	 BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
     
     int n = Integer.parseInt(br.readLine());
     
     
     
     for(int i=0;i<n;i++) {
    	 cnt[Integer.parseInt(br.readLine())]++;
     }
     
     
     br.close();
     
     StringBuilder sb = new StringBuilder();
     
     
     for(int i=1;i<10001;i++) {
    	 while(cnt[i]>0) {
    		 sb.append(i).append('\n');
    		 cnt[i]--;
    	 }
     }
     
     System.out.println(sb);
        
  }
}

비교

  • counting 정렬
  • Arrays.sort() 이용

    counting 정렬이 더 메모리를 적게 잡아 먹는다.
    이 문제에서는 countring 정렬과 StringBuilder 혹은 BufferedWriter 사용법에 대해서 배웠다.
profile
꾸준하게 Ready, Set, Go!

0개의 댓글