https://www.acmicpc.net/problem/15688
15688번: 수 정렬하기 5
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이며, 같은 수가 여러 번 중복될 수도 있다.
www.acmicpc.net
난이도 : 실버 5
태그 : 정렬
설명
시간 누적이라는, 모든 테스트 케이스의 시간이 누적되는 문제로써,
굉장히 타이트한 시간이 주어지는 문제입니다.
시간이 매우 타이트한 만큼, 시간안에 통과하기 위해
bufferedReader와 StringBuilder를 필수로 사용해야 합니다.
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(arr);
StringBuilder sb = new StringBuilder();
for(int i = 0; i<n; i++) {
sb.append(arr[i]).append("\n");
}
System.out.println(sb);
}
}
후기
해당 문제를 풀다가 재미있는 사실을 알았습니다.
StringBuilder를 사용할 때,
개행문자 삽입 방식에 따라
sb.append(arr[i] + "\n"); 일때는 시간초과를 받았지만,
sb.append(arr[i]).append("\n"); 를 사용할 땐 통과한다는 점이였습니다
저는 후자의 경우, append를 한 번 더 호출하므로 시간이 더 들거라 생각해 전자와 같은 방법을 사용했으나,
실제로는 arr[i] + "\n"을 할 때, 새로운 문자열을 생성해 인자로 전달하므로 오히려 더 많은 자원을 잡아먹습니다.
더 자세한 내용은 아래 포스팅을 참고해주세요.
https://uknowblog.tistory.com/158
자바의 StringBuilder 개행문자 삽입방법 - append(str + "\n") vs append(str).append("\n")
https://uknowblog.tistory.com/157 [백준 15688번] [Java] 수 정렬하기 5 https://www.acmicpc.net/problem/15688 15688번: 수 정렬하기 5 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자
uknowblog.tistory.com
'코딩테스트 > Java' 카테고리의 다른 글
[구름톤 챌린지 17일차] [Java] 통신망 분석 (0) | 2023.09.07 |
---|---|
[백준 11654번] [Java] 아스키 코드 (0) | 2023.02.05 |
[백준 10989번] [Java] 수 정렬하기 3 (0) | 2023.02.01 |
[백준 2750번] [Java] 수 정렬하기 (0) | 2023.02.01 |
[백준 10818번] [Java] 최소, 최대 (0) | 2023.01.29 |