백준 10989 수 정렬하기 3 (java)
2017. 1. 2. 17:34ㆍAlgorithm Solution
일단 문제는 아래 그림과 같다.
와 드디어 풀었다...이거 계속 시관 초과 나가지고 진짜 힘들었는데..ㅠㅠㅠ
시간제한이 5초라서 정말 힘들었다. Counting Sort 써서 푸는 건데 자바는 Scanner로 입출력을 받으면 아예 시간단축하기가 힘들다. (카운팅 소트 참고자료 : http://nhs0912.tistory.com/57 )
그래서 사용한 것이 BufferdReader 와 BufferedWriter 이다. 여기서 중요한 것은 BufferedWriter 는 꼭 close()을 해야 출력이 된다. 아마 close() 전까지 계속 대기하는것 같다.
아래는 소스이다. 카운팅 소트에서 누적하진 않고 그냥 바로 출력하였다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | package Study; /** * Created by heeseoknoh on 01/01/2017. */ import java.io.*; import java.util.Scanner; import java.util.StringTokenizer; public class Main { int[] numbers; //입력된 숫자 int[] countArr;//숫자 세기 int max = 0; int index = 0; BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); void inputNumbers() throws IOException {//숫자 입력하기 //Scanner sc = new Scanner(System.in); //int size = sc.nextInt(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int size=Integer.parseInt(br.readLine().trim()); numbers = new int[size]; for (int i = 0; i < numbers.length; i++) { int num = Integer.parseInt(br.readLine().trim()); numbers[i] = num; if (max < num) { max = num; } } } void sort() throws IOException { inputNumbers(); int maxNumber = max; countArr = new int[maxNumber + 1]; //0-maxNumber+1만큼 생성 for (int i = 0; i < numbers.length; i++) { //해당하는 숫자 카운터 countArr[numbers[i]]++; } for (int i = 0; i < countArr.length; i++) { for (int j = 0; j < countArr[i]; j++) { bw.write(i+"\n"); } } bw.close(); } public static void main(String[] args) throws IOException { new Main().sort(); } } | cs |
'Algorithm Solution' 카테고리의 다른 글
백준 9095번 1,2,3 더하기 (0) | 2017.02.27 |
---|---|
백준 1991번 트리순회 (0) | 2017.01.25 |
백준 1193 분수찾기 (0) | 2016.12.16 |
숫자 팰린드롬(palindrome) (0) | 2016.12.12 |
백준 2577번 숫자의 갯수 (0) | 2016.12.07 |