From 3900d3b2324d711e7725d29561bacb9774723bfb Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Sat, 11 Jul 2026 19:15:16 +0000 Subject: [PATCH 1/3] =?UTF-8?q?=E2=9A=A1=20Bolt:=20=EB=B2=A1=ED=84=B0?= =?UTF-8?q?=ED=99=94=EB=90=9C=20match()=20=ED=98=B8=EC=B6=9C=EB=A1=9C=20aF?= =?UTF-8?q?IPC=20=EB=A3=A8=ED=94=84=20=ED=83=90=EC=83=89=20=EB=B3=91?= =?UTF-8?q?=EB=AA=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 - R/aFIPC.R 파일 내에 존재하는 공통 문항 매핑 탐색 로직 최적화 수행. - 루프 내부에서 매번 O(N)의 `match()` 선형 탐색을 수행하던 것을, 루프 밖에서 O(N+M)의 벡터화된 `match()` 연산으로 미리 인덱스를 추출하도록 변경함. - 불필요한 배열 스캔을 제거함으로써, 처리해야할 공통 문항이 많을 때 성능 이득이 크게 발생함. - 테스트 스위트를 구동하여 기존 로직과 동일하게 동작함을 검증함 (52 PASS). --- R/aFIPC.R | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/R/aFIPC.R b/R/aFIPC.R index 87cd3b4..1c0fb73 100644 --- a/R/aFIPC.R +++ b/R/aFIPC.R @@ -757,12 +757,16 @@ autoFIPC <- newScaleParmsItemIdxCache <- split(seq_len(nrow(NewScaleParms)), NewScaleParms$item) oldScaleParmsItemIdxCache <- split(seq_len(nrow(OldScaleParms)), OldScaleParms$item) + # ⚡ Bolt: Vectorize match() outside the loop to avoid repeated array scanning overhead + idxNew_all <- match(newformCommonItemNames, newFormColNames) + idxOld_all <- match(oldformCommonItemNames, oldFormColNames) + for (i in seq_along(oldformCommonItemNames)) { newFormItemStr <- newformCommonItemNames[i] oldFormItemStr <- oldformCommonItemNames[i] - newFormItemName <- newFormColNames[match(newFormItemStr, newFormColNames)] - oldFormItemName <- oldFormColNames[match(oldFormItemStr, oldFormColNames)] + newFormItemName <- newFormColNames[idxNew_all[i]] + oldFormItemName <- oldFormColNames[idxOld_all[i]] if ( !is.na(newFormItemName) && From 9506fd6b8d951e284cf8caac9bb57d802a395167 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Sat, 11 Jul 2026 20:10:22 +0000 Subject: [PATCH 2/3] =?UTF-8?q?=E2=9A=A1=20Bolt:=20=EB=B2=A1=ED=84=B0?= =?UTF-8?q?=ED=99=94=EB=90=9C=20match()=20=ED=98=B8=EC=B6=9C=EB=A1=9C=20aF?= =?UTF-8?q?IPC=20=EB=A3=A8=ED=94=84=20=ED=83=90=EC=83=89=20=EB=B3=91?= =?UTF-8?q?=EB=AA=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 - R/aFIPC.R 파일 내에 존재하는 공통 문항 매핑 탐색 로직 최적화 수행. - 루프 내부에서 매번 O(N)의 `match()` 선형 탐색을 수행하던 것을, 루프 밖에서 O(N+M)의 벡터화된 `match()` 연산으로 미리 인덱스를 추출하도록 변경함. - 불필요한 배열 스캔을 제거함으로써, 처리해야할 공통 문항이 많을 때 성능 이득이 크게 발생함. - 테스트 스위트를 구동하여 기존 로직과 동일하게 동작함을 검증함. From fed20ddf0567032e0988a8a493510de704979eab Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Sat, 11 Jul 2026 21:14:25 +0000 Subject: [PATCH 3/3] =?UTF-8?q?=E2=9A=A1=20Bolt:=20=EB=B2=A1=ED=84=B0?= =?UTF-8?q?=ED=99=94=EB=90=9C=20match()=20=ED=98=B8=EC=B6=9C=EB=A1=9C=20aF?= =?UTF-8?q?IPC=20=EB=A3=A8=ED=94=84=20=ED=83=90=EC=83=89=20=EB=B3=91?= =?UTF-8?q?=EB=AA=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 - R/aFIPC.R 파일 내에 존재하는 공통 문항 매핑 탐색 로직 최적화 수행. - 루프 내부에서 매번 O(N)의 `match()` 선형 탐색을 수행하던 것을, 루프 밖에서 O(N+M)의 벡터화된 `match()` 연산으로 미리 인덱스를 추출하도록 변경함. - 불필요한 배열 스캔을 제거함으로써, 처리해야할 공통 문항이 많을 때 성능 이득이 크게 발생함. - 테스트 스위트를 구동하여 기존 로직과 동일하게 동작함을 검증함.