File tree Expand file tree Collapse file tree 1 file changed +39
-0
lines changed
product-of-array-except-self Expand file tree Collapse file tree 1 file changed +39
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * 복잡도 분석:
3+ * - 시간: O(n) - 배열을 두 번 순회 (왼쪽→오른쪽, 오른쪽→왼쪽)
4+ * - 공간: O(1) - answer 배열은 출력이므로 제외, rightProduct 변수만 사용
5+ */
6+
7+ /**
8+ * @param {number[] } nums
9+ * @return {number[] }
10+ */
11+ const productExceptSelf = ( nums ) => {
12+ const n = nums . length ;
13+ const answer = new Array ( n ) ;
14+
15+ /**
16+ * 아이디어:
17+ * answer[i] = (i 왼쪽 모든 요소의 곱) × (i 오른쪽 모든 요소의 곱)
18+ *
19+ * 예시: [1, 2, 3, 4]
20+ * - 왼쪽 곱: [1, 1, 2, 6]
21+ * - 오른쪽 곱: [24, 12, 4, 1]
22+ * - 결과: [24, 12, 8, 6]
23+ */
24+
25+ // 1단계: 왼쪽에서 오른쪽으로 순회하며 왼쪽 곱 저장
26+ answer [ 0 ] = 1 ; // 첫 번째는 왼쪽에 아무것도 없으므로 1
27+ for ( let i = 1 ; i < n ; i ++ ) {
28+ answer [ i ] = answer [ i - 1 ] * nums [ i - 1 ] ; // 이전까지의 곱 × 이전 요소
29+ }
30+
31+ // 2단계: 오른쪽에서 왼쪽으로 순회하며 오른쪽 곱을 곱해줌
32+ let rightProduct = 1 ; // 오른쪽 곱을 누적할 변수
33+ for ( let i = n - 1 ; i >= 0 ; i -- ) {
34+ answer [ i ] *= rightProduct ; // 왼쪽 곱 × 오른쪽 곱
35+ rightProduct *= nums [ i ] ; // 다음 순회를 위해 현재 요소 곱함
36+ }
37+
38+ return answer ;
39+ } ;
You can’t perform that action at this time.
0 commit comments