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 문제 풀이 #307

Merged
merged 7 commits into from
Aug 17, 2024
Merged

[강희찬] Week1 문제 풀이 #307

merged 7 commits into from
Aug 17, 2024

Conversation

@HC-kang HC-kang marked this pull request as ready for review August 13, 2024 00:00
top-k-frequent-elements/HC-kang.ts Outdated Show resolved Hide resolved
kth-smallest-element-in-a-bst/HC-kang.ts Outdated Show resolved Hide resolved
@HC-kang HC-kang requested a review from Sunjae95 August 13, 2024 12:45
@HC-kang HC-kang changed the title [강희찬] Week1 문제 풀이 [TS][강희찬] Week1 문제 풀이 Aug 15, 2024
// Time complexity: O(n)
// Space complexity: O(n)
function containsDuplicate(nums: number[]): boolean {
return nums.length !== new Set(nums).size;
Copy link
Contributor

Choose a reason for hiding this comment

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

set의 속성을 잘 활용하시네요. 이런방법이 있는지 몰랐네요👍

// Time complexity: O(n)
// Space complexity: O(n)
function kthSmallest(root: TreeNode | null, k: number): number {
function inorder(root: TreeNode | null, arr: number[]) {
Copy link
Contributor

Choose a reason for hiding this comment

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

arr의 params가 꼭 필요한 함수인지 궁금합니다.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

아 그렇네요. 스코프 내의 함수이니 별도로 인자로 전달해주지 않아도 정상적으로 동작 했을것 같습니다!

const arr: number[] = [];
inorder(root, arr);
return arr[k - 1];
}
Copy link
Contributor

Choose a reason for hiding this comment

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

필수 사항은 아니지만 k번째 왔을 때 early return하여 순회를 멈추는 방법도 생각해보는건 어떨까요?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

그렇네요 확실히 얼리 리턴을 해 주니 성능이 올라가네요! 감사합니다~

// Time complexity: O(logn)
// Space complexity: O(logn)
// it has a better readability and not so bad in space complexity
return n.toString(2).split('1').length - 1;
Copy link
Contributor

Choose a reason for hiding this comment

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

string 메서드 관련 시간복잡도는 모르고있었는데 리뷰하면서 알게됐네요 :)

function topKFrequent(nums: number[], k: number): number[] {
const frequentMap = new Map<number, number>();
for (const num of nums) { // s.c. O(n)
frequentMap.set(num, (frequentMap.get(num) || 0) + 1);
Copy link
Contributor

Choose a reason for hiding this comment

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

현재 코드에서 || 연산자의 사용에서는 문제 없지만 ??연산자를 활용하는것이 목적에 맞아보이는데 희찬님은 어떻게 생각하시나요?

저는 ||연산자의 경우 boolean 값을 반환하는 경우가 있어 예기치 못한 실수나 오류가 발생할 확률이 있을것이라고 생각합니다.

그래서 값을 반환하고 싶으면 ?? 연산자를 통해서 왼쪽 피연산자가 falsy한 값일 때 지정한 값으로 반환하는게 휴면에러를 줄일수 있을것 같아요.

Copy link
Contributor Author

@HC-kang HC-kang Aug 15, 2024

Choose a reason for hiding this comment

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

음 습관적으로 || 연산자를 사용했는데, 만약 복잡한 코드 내에서 오탈자로 |로 사용된다면 찾기 힘든 버그가 될수도 있겠네요.
반면에 ?? 연산자를 사용한다면 ?로 오탈자가 나더라도 신텍스 에러로 강조될테니 좋은 의견이네요!

그리고 ?? 연산자는 불필요하게 '', false, 0에 대해서도 처리하지 않는다는 점에서 || 보다는 ??를 사용한 코드가 좀 더 뾰족한 코드가 될 것 같습니다
좋은 리뷰 감사합니다!

for (let i = 0; i < s.length; i++) {
for (let j = i + 1; j <= s.length; j++) {
// this will cost both t.c. and s.c. O(n^3)
candidates.set(s.slice(i, j), (candidates.get(s.slice(i, j)) || 0) + 1);
Copy link
Contributor

Choose a reason for hiding this comment

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

slice method을 중심으로 생각해보면 필수적으로 get 메서드를 사용해야 할까요?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

질문의 내용을 정확하게 이해하지 못했습니다
get메서드를 사용한 이유에 대해 말씀해주신걸까요..??

Copy link
Contributor

Choose a reason for hiding this comment

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

�질문이 이상했네요.
s.slice의 값은 새로운 배열값을 리턴하기 때문에 candidates.get(s.slice(i, j)) 부분이 항상 undefined로 나오기 때문에 코멘트남겼던 거였습니다!

저는 candidates를 Map 객체가 아닌 문자 배열로 할당하는 방법이 더 명시적이라고 생각합니다.
희찬님은 어떻게 생각하시나요??

Copy link
Contributor Author

Choose a reason for hiding this comment

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

오 이런.. 왜 문자열이 나올거라고 착각했을까요?
불필요한 메모리 낭비를 막겠다고 굳이 맵을 사용했는데 오히려 낭비를 하고있었네요.. 감사합니다!

Comment on lines +77 to +84
function expandIsPalindrome(left: number, right: number): number {
let count = 0;
while (left >= 0 && right < s.length && s[left] === s[right]) {
count++;
left--;
right++;
}
return count;
Copy link
Contributor

Choose a reason for hiding this comment

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

이런 방법을 사용하면 모두 순회를 할 수 있군요..!

@HC-kang HC-kang added the ts label Aug 15, 2024
@HC-kang HC-kang changed the title [TS][강희찬] Week1 문제 풀이 [강희찬] Week1 문제 풀이 Aug 15, 2024
Copy link
Contributor

@DaleSeo DaleSeo left a comment

Choose a reason for hiding this comment

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

첫 주 문제 풀이를 축하드립니다!

image

frequentMap.set(num, (frequentMap.get(num) || 0) + 1);
}
return Array.from(frequentMap.entries())
.sort((a, b) => b[1] - a[1]) // this will cost t.c. O(nlogn)
Copy link
Contributor

Choose a reason for hiding this comment

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

이번 주에 아직 시간이 많이 남았으니 frequentMap을 상대로 전체 정렬을 피할 수 있는 방법을 고민해보시면 좋을 것 같습니다.

@yolophg yolophg merged commit a680861 into DaleStudy:main Aug 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
No open projects
Status: Completed
Development

Successfully merging this pull request may close these issues.

5 participants