왜 쓰는거지?
StringBuilder sb = new StringBuilder();
는 출력 성능을 최적화하기 위해 사용한다.
입출력 속도가 중요한 환경에서 sout 은 반복해서 쓰면 시간 초과가 날 수 있다.
예를 들어,
for (int i = 0; i < 100_000; i++) {
System.out.println("YES"); // 느림
}
이건 매번 콘솔에 접근하니까 속도가 느리다. 이런 경우에는 sb를 써서 메모리에 누적했다가 한번에 출력하는 것이 좋다.
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100_000; i++) {
sb.append("YES\\n"); // 메모리 상에 저장
}
System.out.print(sb); // 한 번만 출력
그렇다면 왜 백준 1717 번 문제에서는 sb를 써야 할까.
아. n과 m이 1,000,000,000과 1,000,000로 매우 크고 누적했다가 yes or no 한번 출력하고, 또 누적했다가 yes.,no 출력하는 구조이기 때문에 그렇다.
sb 는 stringBuilder의 객체로, 문자열을 효율적으로 이어붙일때 쓴다.
.trim()은 문자열 앞뒤의 개행을 제거한다.