File tree Expand file tree Collapse file tree 3 files changed +110
-0
lines changed
product-of-array-except-self Expand file tree Collapse file tree 3 files changed +110
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * ๋ณต์ก๋ ๋ถ์:
3+ * - ์๊ฐ: O(n) - 3๋ถํฐ n๊น์ง ํ ๋ฒ์ฉ ์ํ
4+ * - ๊ณต๊ฐ: O(1) - prev1, prev2 ๋ ๋ณ์๋ง ์ฌ์ฉ
5+ */
6+
7+ /**
8+ * @param {number } n
9+ * @return {number }
10+ */
11+ const climbStairs = ( n ) => {
12+ // ๊ธฐ๋ณธ ์ผ์ด์ค: 1์นธ์ด๋ฉด 1๊ฐ์ง, 2์นธ์ด๋ฉด 2๊ฐ์ง
13+ if ( n <= 2 ) return n ;
14+
15+ /**
16+ * ์์ด๋์ด:
17+ * n๋ฒ์งธ ๊ณ๋จ์ ๋๋ฌํ๋ ๋ฐฉ๋ฒ =
18+ * 1) n-1๋ฒ์งธ ๊ณ๋จ์์ 1์นธ ์ค๋ฅด๊ธฐ
19+ * 2) n-2๋ฒ์งธ ๊ณ๋จ์์ 2์นธ ์ค๋ฅด๊ธฐ
20+ *
21+ * ์ฆ, f(n) = f(n-1) + f(n-2) ํผ๋ณด๋์น ์์ด๊ณผ ๋์ผ
22+ *
23+ * ์ฌ๊ท๋ก ํ๋ฉด ์ค๋ณต ๊ณ์ฐ์ด ๋ง์์ ๋นํจ์จ์
24+ * โ ์ด์ ๋ ๊ฐ๋ง ๊ธฐ์ตํ๋ฉด์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ํด๊ฒฐ
25+ */
26+
27+ let prev2 = 1 ; // f(1) = 1
28+ let prev1 = 2 ; // f(2) = 2
29+
30+ // 3๋ถํฐ n๊น์ง ์ฐจ๋ก๋๋ก ๊ณ์ฐ
31+ for ( let i = 3 ; i <= n ; i ++ ) {
32+ const current = prev1 + prev2 ; // ํ์ฌ = ์ด์ + ์ด์ ์ ์ด์
33+ prev2 = prev1 ; // ๊ฐ๋ค์ ํ ์นธ์ฉ ์์ผ๋ก ์ด๋
34+ prev1 = current ;
35+ }
36+
37+ return prev1 ;
38+ } ;
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+ } ;
Original file line number Diff line number Diff line change 1+ // ์๊ฐ ๋ณต์ก๋: O(n) - ๊ฐ ๋ฌธ์์ด์ ํ ๋ฒ์ฉ๋ง ์ํ
2+ // ๊ณต๊ฐ ๋ณต์ก๋: O(1) - ์ต๋ 26๊ฐ์ ์๋ฌธ์๋ง ์ ์ฅ (์์ ๊ณต๊ฐ)
3+
4+ /**
5+ * @param {string } s
6+ * @param {string } t
7+ * @return {boolean }
8+ */
9+ const isAnagram = ( s , t ) => {
10+ // ๊ธธ์ด ์ฒดํฌ๋ ํ์
11+ if ( s . length !== t . length ) {
12+ return false ;
13+ }
14+
15+ // ๊ฐ ๋ฌธ์์ ๊ฐ์๋ฅผ ์ ์ฅํ ๊ฐ์ฒด
16+ const charCount = { } ;
17+
18+ // ์ฒซ ๋ฒ์งธ ๋ฌธ์์ด์ ๊ฐ ๋ฌธ์ ๊ฐ์ ์นด์ดํธ
19+ for ( let char of s ) {
20+ charCount [ char ] = ( charCount [ char ] || 0 ) + 1 ;
21+ }
22+
23+ // ๋ ๋ฒ์งธ ๋ฌธ์์ด์ ๋ฌธ์๋ฅผ ํ๋์ฉ ๋นผ๋ฉด์ ํ์ธ
24+ for ( let char of t ) {
25+ if ( ! charCount [ char ] ) {
26+ // ์๋ ๋ฌธ์๊ฑฐ๋ ์ด๋ฏธ ๋ค ์ฌ์ฉํ ๊ฒฝ์ฐ
27+ return false ;
28+ }
29+ charCount [ char ] -- ;
30+ }
31+
32+ return true ;
33+ } ;
You canโt perform that action at this time.
0 commit comments