21.08.22 기록

최대 1 분 소요

백준 알고리즘 10989 풀이

🎆나의 풀이(메모리 337MB, 시간 1.76s로 통과)

-이 문제 역시 카운팅 정렬 응용 방법으로 풀었다. 중복값을 체크하기 위해 boolean 대신 int형 배열을 사용했다.

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

  public class B2751 {
      public static void main(String[] args) throws IOException {
          BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
          int N = Integer.parseInt(br.readLine());

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

          StringBuilder sb = new StringBuilder();
          for(int i = 0; i < numbers.length; i++) {
              if(numbers[i] > 1) {    //중복으로 카운트 된 경우
                  for(int j = 0; j < numbers[i]; j++) {   //중복 수 만큼 append
                      sb.append(i).append("\n");
                  }
              }
              if(numbers[i] == 1) { //한 번만 카운트 된 경우 바로 append
                  sb.append(i).append("\n");
              }
          }
          System.out.println(sb);
      }
  }


🎆해설(메모리 337MB, 시간 1.77s로 통과)

-해설 역시 같은 로직으로 풀이했다. 대신 출력부분에서 while문을 사용하셨다.


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

public class B10989 {

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

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

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

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

카테고리:

업데이트: