본문 바로가기
Computer Science/Algorithm

[백준] 10989 - 수 정렬하기 3 (Java)

by soro.k 2022. 9. 21.

https://st-lab.tistory.com/107?category=857114 

 

[백준] 10989번 : 수 정렬하기 3 - JAVA [자바]

www.acmicpc.net/problem/10989 10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. ww..

st-lab.tistory.com

*해당 포스팅은 상단에 링크된 포스팅을 바탕으로 개인 공부 목적을 위해 작성되었으므로 자세한 내용은 위 링크를 확인해 주시기 바랍니다.


 

제출 코드 (통과는 함)

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int[] arr = new int[20001];
        int N = Integer.parseInt(br.readLine());

        for(int i = 0; i < N; i++) {
            arr[Integer.parseInt(br.readLine()) + 10000] += 1;
        }

        for(int i = 0; i < arr.length; i++) {
            if (arr[i] > 0) {
                for(int j = 0; j < arr[i]; j++) {
                    sb.append(i - 10000).append("\n");
                }
            }
        }
        System.out.println(sb);
    }
}

그런데 여기서 문제는 코드를 쓸데없이 복잡하게 작성했고 배열의 범위도 잘못됐다! 이전에 boolean 배열할 때처럼 범위를 설정했는데 선생님 코드를 보니 그게 아니었다. (머쓱) 그럼 다시 선생님의 코드로..

 

 

선생님 코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int[] arr = new int[10001];
        int N = Integer.parseInt(br.readLine());

        for(int i = 0; i < N; i++) {
            arr[Integer.parseInt(br.readLine())]++;
        }

        for(int i = 1; i < arr.length; i++) {
            while (arr[i] > 0) {
                sb.append(i).append("\n");
                arr[i]--;
            }
        }
        System.out.println(sb);
    }
}

아니 왜 쉬운 걸 생각을 못하는 걸까? 증감연산자 모르는 것도 아니고 while문을 모르는 것도 아닌데?

많이 안 짜봤으니까 그렇겠지(자문자답). 결론은 백문이불여일타!