Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[실습] 연습문제 week1/03 제출합니다 #14

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion packages/example/src/1week/03/__submit__/minsoo-web.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ describe('multiDimensionalAccumulate', () => {
[19, 18, 17, 16, 15, 14, 13, 12, 11],
]

expect(multiDimensionalAccumulate(multiDimensionalArr)).toBe(360)
expect(multiDimensionalAccumulate(multiDimensionalArr)).toBe(86)
expect(multiDimensionalAccumulate(multiDimensionalArr)).toBe(86)
Comment on lines +12 to +13
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

혹시 왜 두줄로 하셨는지 궁금해요

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

순수함수니까 실행 횟수와 관계없이, 같은 input에서 같은 output이 나오는 것을 테스트하고자 했습니다!

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아하! 그러면 함수를 두 번 호출하는 것이 2번의 기준으로 strict mode를 의미하는 것으로 추측하였는데 이유를 들을 수 있을까요? 테스트 횟수에 대한 기준이 있는 것인지 궁금해요. 테스트를 접한지 얼마되지 않아서 실수로 느껴졌었거든요.

Copy link
Member Author

@minsoo-web minsoo-web Aug 11, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 저도 저런 식으로 똑같이 적는 방법은 이번이 처음이어서 2번이냐 몇 번이냐는 크게 중요하진 않았던 것 같고,
multiDimensionalArr 을 암묵적 출력으로 변경시키지 않는다는 걸 보여주고 싶어서 일부러 변수로 선언하고 두 번 호출해봤던 것 같습니다.

지금 생각해보면 실행 후의 multiDimensionalArr 이 실행 전과 동일하다라는 걸 테스트 하는 게 좀 더 명확했겠네요

})
})
28 changes: 15 additions & 13 deletions packages/example/src/1week/03/__submit__/minsoo-web.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
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
/**
* 접근 방법:
* 커밋내역을 보시면 아시겠지만 ㅋㅋ큐ㅠㅠ 문제를 완전 잘못 이해하고 풀어버려서
* 다시 풀었습니다.
*
* 다시 풀었을 때 첫 접근 방법은 2중 reduce문을 사용해서 변수명을 직관적으로 지으면서 가독성을 높혔었는데
* 그럼 기존의 2중 for 문이랑 크게 다르지 않다고 생각해서 n^2 시간 복잡도를 개선해봤습니다.
* flatMap을 활용해서, 대각선 이하의 숫자들만 잘라내고
* 그 값들을 더했습니다.
*/
export const multiDimensionalAccumulate = (arr: number[][]): number => {
return arr
.flatMap((innerArray, rowIndex) => innerArray.slice(0, rowIndex))
.reduce(sum, 0)
}