File tree Expand file tree Collapse file tree 1 file changed +52
-0
lines changed
product-of-array-except-self Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * 문제 유형
3
+ * - Array
4
+ *
5
+ * 문제 설명
6
+ * - 자기 자신을 제외한 나머지의 곱 구하기
7
+ *
8
+ * 아이디어
9
+ * 1) Array - 자기 자신보다 이전, 이후 의 누적곱(left, right) 구하고, 최종적으로 곱하기
10
+ * 2) 0읠 제외한 나머지의 곱, 0의 갯수 카운트를 이용하여 조건에 따라 계산하기
11
+ */
12
+ function productExceptSelf ( nums : number [ ] ) : number [ ] {
13
+ const answer = Array ( nums . length ) . fill ( 0 ) ;
14
+ let zeroCount = 0 ;
15
+ const productWithoutZero = nums . reduce ( ( acc , cur ) => {
16
+ if ( cur === 0 ) {
17
+ zeroCount ++ ;
18
+ return acc ;
19
+ }
20
+ return cur * acc ;
21
+ } , 1 ) ;
22
+
23
+ for ( let i = 0 ; i < nums . length ; i ++ ) {
24
+ if ( zeroCount > 0 ) {
25
+ if ( nums [ i ] ) answer [ i ] = 0 ;
26
+ else answer [ i ] = zeroCount > 1 ? 0 : productWithoutZero ;
27
+ } else {
28
+ answer [ i ] = productWithoutZero / nums [ i ] ;
29
+ }
30
+ }
31
+ return answer ;
32
+ }
33
+
34
+ function productExceptSelfArrayVersion ( nums : number [ ] ) : number [ ] {
35
+ const answer = Array ( nums . length ) ;
36
+ const left = Array ( nums . length ) . fill ( 1 ) ;
37
+ const right = Array ( nums . length ) . fill ( 1 ) ;
38
+
39
+ for ( let i = 1 ; i < nums . length ; i ++ ) {
40
+ left [ i ] = left [ i - 1 ] * nums [ i - 1 ] ;
41
+ }
42
+
43
+ for ( let i = nums . length - 2 ; i >= 0 ; i -- ) {
44
+ right [ i ] = right [ i + 1 ] * nums [ i + 1 ] ;
45
+ }
46
+
47
+ for ( let i = 0 ; i < nums . length ; i ++ ) {
48
+ answer [ i ] = left [ i ] * right [ i ] ;
49
+ }
50
+
51
+ return answer ;
52
+ }
You can’t perform that action at this time.
0 commit comments