From 44c67fc4261aaeb7a7c0c8eab3e3824c5fd74457 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Sun, 28 Jun 2026 20:54:37 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=20Bolt:=20StringBuilder=EB=A5=BC=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=98=EC=97=AC=20=EB=AC=B8=EC=9E=90?= =?UTF-8?q?=EC=97=B4=20=EA=B2=B0=ED=95=A9=20=EC=B5=9C=EC=A0=81=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 반복문 내에서 += 연산자를 사용하여 문자열을 결합할 경우, N^2의 시간 복잡도를 가져 파일 수가 많은 디렉토리 처리 시 성능이 매우 저하됩니다. StringBuilder를 사용하여 선형 시간으로 문자열 할당을 최적화했습니다. --- src/main/kotlin/html4tree/main.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/html4tree/main.kt b/src/main/kotlin/html4tree/main.kt index 50b2680d..5dcd51fa 100644 --- a/src/main/kotlin/html4tree/main.kt +++ b/src/main/kotlin/html4tree/main.kt @@ -124,18 +124,21 @@ fun process_dir(curr_dir: File){ """ val index_middle = fun():String{ - var l="" + // ⚡ Bolt: 반복문 내에서 문자열 결합(+=) 대신 StringBuilder 사용 + // 이렇게 하면 O(N^2)의 문자열 할당을 피할 수 있어 파일 수가 많은 디렉토리에 대해 + // 성능이 크게 향상됩니다. + val l = StringBuilder() val dir_files: MutableList = curr_dir.listFiles()?.toMutableList() ?: mutableListOf() dir_files.sortWith(compareBy ({it.name}) ) dir_files.forEach { val isLinkedDirectory = it.isDirectory() && !java.nio.file.Files.isSymbolicLink(it.toPath()) if((it.getName() !in exclude) && (isLinkedDirectory || !it.isDirectory())) { - l += """
  • ${if (isLinkedDirectory) { "📁" } else { "▸" }} ${it.getName().escapeHtml()}
  • """+"\n" + l.append("""
  • ${if (isLinkedDirectory) { "📁" } else { "▸" }} ${it.getName().escapeHtml()}
  • """+"\n") } } - return l; + return l.toString(); } val index_bottom="""