From b7a5186702e0ea9ee583ebf1b55cc257149a3f46 Mon Sep 17 00:00:00 2001 From: minsoo kim Date: Wed, 2 Aug 2023 12:15:33 +0900 Subject: [PATCH 1/2] =?UTF-8?q?practice:=201=EC=A3=BC=EC=B0=A8=203?= =?UTF-8?q?=EB=B2=88=20=EB=AC=B8=EC=A0=9C=20=EC=A0=9C=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1week/03/__submit__/minsoo-web.test.ts | 16 ++++++++++- .../src/1week/03/__submit__/minsoo-web.ts | 27 ++++++++++--------- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/packages/example/src/1week/03/__submit__/minsoo-web.test.ts b/packages/example/src/1week/03/__submit__/minsoo-web.test.ts index 60fa5ac..c23ec4e 100644 --- a/packages/example/src/1week/03/__submit__/minsoo-web.test.ts +++ b/packages/example/src/1week/03/__submit__/minsoo-web.test.ts @@ -8,6 +8,20 @@ describe('multiDimensionalAccumulate', () => { [11, 12, 13, 14, 15, 16, 17, 18, 19], [19, 18, 17, 16, 15, 14, 13, 12, 11], ] - expect(multiDimensionalAccumulate(multiDimensionalArr)).toBe(86) + + expect(multiDimensionalAccumulate(multiDimensionalArr)).toBe(360) + expect(multiDimensionalAccumulate(multiDimensionalArr)).toBe(360) + }) + + it('case: 2', () => { + const multiDimensionalArr = [ + [1, 2, 3, 4, 5, 6, 7, 8, 9], + [9, 8, 7, 6, 5, 4, 3, 2, 1], + [11, 12, 13, 14, 15, 16, 17, 18, 19], + [19, 18, 17, 16, 15, 14, 13, 12, 11], + ] + + expect(multiDimensionalAccumulate(multiDimensionalArr, 10)).toBe(370) + expect(multiDimensionalAccumulate(multiDimensionalArr, 10)).toBe(370) }) }) diff --git a/packages/example/src/1week/03/__submit__/minsoo-web.ts b/packages/example/src/1week/03/__submit__/minsoo-web.ts index 84e0d48..5266a1f 100644 --- a/packages/example/src/1week/03/__submit__/minsoo-web.ts +++ b/packages/example/src/1week/03/__submit__/minsoo-web.ts @@ -1,15 +1,16 @@ -export function multiDimensionalAccumulate( - multiDimensionalArr: number[][], -): number { - let accumulator = 0 +const sum = (a: number, b: number): number => a + b - for (let i = 0; i < multiDimensionalArr.length; i += 1) { - for (let j = 0; j < multiDimensionalArr[i].length; j += 1) { - if (j < i) { - accumulator += multiDimensionalArr[i][j] - } - } - } - - return accumulator +/** + * 접근방법: + * flat과 reduce를 조합해서 간단하게 바꿔봤습니다. + * 만약, 개선된 2번 문제를 사용할 수 있었다면, reduce의 콜백함수로 활용해서, flat 없이 작업해볼 수 있겠다? 라는 생각도 해봤습니다. + * + * @param arr 2중 배열입니다. + * @returns 배열의 모든 숫자들의 합이 계산됩니다. + */ +export const multiDimensionalAccumulate = ( + arr: number[][], + initialValue = 0, +): number => { + return arr.flat().reduce(sum, initialValue) } From f1499cb383b79e7fa1424d05bb9c1ce3f922e04b Mon Sep 17 00:00:00 2001 From: minsoo kim Date: Wed, 2 Aug 2023 12:39:28 +0900 Subject: [PATCH 2/2] =?UTF-8?q?practice:=201=EC=A3=BC=EC=B0=A8=203?= =?UTF-8?q?=EB=B2=88=20=EB=AC=B8=EC=A0=9C=20=EC=A0=9C=EC=B6=9C=20--=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1week/03/__submit__/minsoo-web.test.ts | 16 ++------------ .../src/1week/03/__submit__/minsoo-web.ts | 21 ++++++++++--------- 2 files changed, 13 insertions(+), 24 deletions(-) diff --git a/packages/example/src/1week/03/__submit__/minsoo-web.test.ts b/packages/example/src/1week/03/__submit__/minsoo-web.test.ts index c23ec4e..b7ea777 100644 --- a/packages/example/src/1week/03/__submit__/minsoo-web.test.ts +++ b/packages/example/src/1week/03/__submit__/minsoo-web.test.ts @@ -9,19 +9,7 @@ describe('multiDimensionalAccumulate', () => { [19, 18, 17, 16, 15, 14, 13, 12, 11], ] - expect(multiDimensionalAccumulate(multiDimensionalArr)).toBe(360) - expect(multiDimensionalAccumulate(multiDimensionalArr)).toBe(360) - }) - - it('case: 2', () => { - const multiDimensionalArr = [ - [1, 2, 3, 4, 5, 6, 7, 8, 9], - [9, 8, 7, 6, 5, 4, 3, 2, 1], - [11, 12, 13, 14, 15, 16, 17, 18, 19], - [19, 18, 17, 16, 15, 14, 13, 12, 11], - ] - - expect(multiDimensionalAccumulate(multiDimensionalArr, 10)).toBe(370) - expect(multiDimensionalAccumulate(multiDimensionalArr, 10)).toBe(370) + expect(multiDimensionalAccumulate(multiDimensionalArr)).toBe(86) + expect(multiDimensionalAccumulate(multiDimensionalArr)).toBe(86) }) }) diff --git a/packages/example/src/1week/03/__submit__/minsoo-web.ts b/packages/example/src/1week/03/__submit__/minsoo-web.ts index 5266a1f..4ed306e 100644 --- a/packages/example/src/1week/03/__submit__/minsoo-web.ts +++ b/packages/example/src/1week/03/__submit__/minsoo-web.ts @@ -1,16 +1,17 @@ const sum = (a: number, b: number): number => a + b /** - * 접근방법: - * flat과 reduce를 조합해서 간단하게 바꿔봤습니다. - * 만약, 개선된 2번 문제를 사용할 수 있었다면, reduce의 콜백함수로 활용해서, flat 없이 작업해볼 수 있겠다? 라는 생각도 해봤습니다. + * 접근 방법: + * 커밋내역을 보시면 아시겠지만 ㅋㅋ큐ㅠㅠ 문제를 완전 잘못 이해하고 풀어버려서 + * 다시 풀었습니다. * - * @param arr 2중 배열입니다. - * @returns 배열의 모든 숫자들의 합이 계산됩니다. + * 다시 풀었을 때 첫 접근 방법은 2중 reduce문을 사용해서 변수명을 직관적으로 지으면서 가독성을 높혔었는데 + * 그럼 기존의 2중 for 문이랑 크게 다르지 않다고 생각해서 n^2 시간 복잡도를 개선해봤습니다. + * flatMap을 활용해서, 대각선 이하의 숫자들만 잘라내고 + * 그 값들을 더했습니다. */ -export const multiDimensionalAccumulate = ( - arr: number[][], - initialValue = 0, -): number => { - return arr.flat().reduce(sum, initialValue) +export const multiDimensionalAccumulate = (arr: number[][]): number => { + return arr + .flatMap((innerArray, rowIndex) => innerArray.slice(0, rowIndex)) + .reduce(sum, 0) }