왜 쓰는거지?

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()은 문자열 앞뒤의 개행을 제거한다.