happy coding

[java] 10989. 수 정렬하기 3 본문

coding study/baekjoon

[java] 10989. 수 정렬하기 3

yeoonii 2023. 8. 9. 17:35
import java.io.*;
import java.math.*;
import java.util.Arrays;

public 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[] array = new int[N];

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

        Arrays.sort(array);

        for (int num : array) {
            System.out.println(num);
        }
    }
}

시간초과 떴다...

 

import java.io.*;
import java.math.*;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        int max = 10001;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int[] array = new int[N];
        int[] sorted = new int[max+1];

        for (int i=0 ; i<array.length ; i++) {
            array[i] = Integer.parseInt(br.readLine());
            sorted[array[i]] += 1;
        }

        StringBuilder sb = new StringBuilder();

        for (int i=0 ; i<max ; i++) {
            while (sorted[i] > 0){
                sb.append(i).append("\n");
                sorted[i] -= 1;
            }
        }
        String result = sb.toString().trim();
        System.out.print(result);
    }
}

문제에서 주어진 시간과 메모리를 생각했어야 했다. 원래도 버퍼로 푸니까 아무 생각이 없었는데 이번에 StringBuilder를 알게 되어서 다행이다. 

 

StringBuilder는 Java에서 문자열을 효율적으로 처리하기 위한 클래스입니다. 문자열을 불변하는 String 클래스와는 달리, StringBuilder는 가변적인 문자열을 다루는 데 사용됩니다. 이를 통해 문자열 연산이 발생할 때마다 새로운 문자열을 생성하지 않고 기존 문자열을 변경하거나 추가할 수 있습니다. 이로써 문자열 조작 작업에서 메모리와 시간을 절약할 수 있습니다.

StringBuilder의 주요 특징은 다음과 같습니다:

  1. 가변성: 문자열을 변경하거나 추가할 수 있어서 불필요한 객체 생성을 방지하고 메모리를 절약합니다.
  2. 연결하거나 수정하는 데에 효율적: 문자열을 연결하거나 수정할 때 String 클래스보다 훨씬 효율적인 성능을 제공합니다.
  3. 스레드 안전하지 않음: StringBuilder는 스레드 안전하지 않기 때문에 멀티스레드 환경에서 동기화를 고려해야 합니다.
  4. 메소드 체이닝: 메소드 호출을 연속해서 할 수 있어서 코드가 간결하고 가독성이 좋아집니다.

'coding study > baekjoon' 카테고리의 다른 글

[java] 1546. 평균  (0) 2023.08.13
[java] 10798. 세로 읽기  (0) 2023.08.12
[java] 11653. 소인수분해  (0) 2023.08.09
[java] 20205. 교수님 그림이 깨지는데요?  (0) 2023.08.09
[java] 1009. 분산 처리  (0) 2023.08.08
Comments