-
Notifications
You must be signed in to change notification settings - Fork 120
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
[선재] WEEK02 Solutions #341
Conversation
let subStr = ""; | ||
let isSubPalindromic = true; | ||
answer++; | ||
|
||
for (let endIndex = startIndex + 1; endIndex < len; endIndex++) { | ||
if (isSubPalindromic && s[startIndex] === s[endIndex]) answer++; | ||
subStr += s[endIndex]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@DaleSeo
slice를 하지말고 마지막을 추가하면서 계산하라는 말씀이 이 부분이 맞을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
제 피드백을 약간 잘못 이해하신 것 같습니다. 저는 아래에 있는 isPalindromic()
함수에 대해서 말씀을 드렸어요. 이 함수가 부분 문자열을 인자로 받는 대신에 시작 인덱스와 종료 인덱스를 받게 변경하면 공간 복잡도를 O(n)
에서 O(1)
로 개선할 수 있을 것 같다는 의견을 드렸습니다. 현재 코드는 여전히 O(n)
의 공간을 쓰는 것으로 보입니다. 왜냐하면 subStr
변수에 최대 n
개의 글자가 저장될 수 있기 때문입니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
엇.. 그렇군요! 이 부분은 다시 고민해보겠습니다 ㅎㅎ
while (s[start] === s[end] && start >= 0 && end < len) { | ||
count++; | ||
[start, end] = [start - 1, end + 1]; | ||
} | ||
[start, end] = [i, i + 1]; | ||
while (s[start] === s[end] && start >= 0 && end < len) { | ||
count++; | ||
[start, end] = [start - 1, end + 1]; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@YeonguChoe
kadane's 알고리즘을 검색해보니 부분합이이라는 것을 알게 됐네요. 적용하다보니 달레님 블로그 솔루션 3번으로 귀결됐습니다 :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
나이스샷!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
모임 때 받으셨던 피드백에 대해서 고민해보시는 모습이 멋있습니다!
let subStr = ""; | ||
let isSubPalindromic = true; | ||
answer++; | ||
|
||
for (let endIndex = startIndex + 1; endIndex < len; endIndex++) { | ||
if (isSubPalindromic && s[startIndex] === s[endIndex]) answer++; | ||
subStr += s[endIndex]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
제 피드백을 약간 잘못 이해하신 것 같습니다. 저는 아래에 있는 isPalindromic()
함수에 대해서 말씀을 드렸어요. 이 함수가 부분 문자열을 인자로 받는 대신에 시작 인덱스와 종료 인덱스를 받게 변경하면 공간 복잡도를 O(n)
에서 O(1)
로 개선할 수 있을 것 같다는 의견을 드렸습니다. 현재 코드는 여전히 O(n)
의 공간을 쓰는 것으로 보입니다. 왜냐하면 subStr
변수에 최대 n
개의 글자가 저장될 수 있기 때문입니다.
* result: | ||
* 1. couldn't think of the conditions | ||
* true: 1~9, 10~27 | ||
* false: 0, 0N, 28↑ | ||
* 2. persist solution that is top down | ||
*/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
해당부분은 직접 풀어보려 시도했지만 풀지 못한관계로 알고달레 블로그 참고해서 작성했습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수고하셨습니다!
preorder.forEach((val, i) => { | ||
const node = new TreeNode(val); | ||
|
||
if (i === 0) answer = node; | ||
|
||
const leftLen = leftStack.length; | ||
const rightLen = rightStack.length; | ||
|
||
if (leftLen && rightLen) { | ||
if (leftStack[leftLen - 1].left) rightStack[rightLen - 1].right = node; | ||
else leftStack[leftLen - 1].left = node; | ||
} | ||
if (leftLen && !rightLen) leftStack[leftLen - 1].left = node; | ||
if (!leftLen && rightLen) rightStack[rightLen - 1].right = node; | ||
|
||
leftStack.push(node); | ||
|
||
while (leftStack.length && pointer < inorder.length) { | ||
if (leftStack[leftStack.length - 1].val !== inorder[pointer]) break; | ||
rightStack.push(leftStack.pop()); | ||
pointer++; | ||
} | ||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
굉장히 멋진 풀이네요!
1주차 피드백 추가
@DaleSeo @YeonguChoe 두분 피드백 내용 적용했습니다.
@DaleSeo님 피드백 받을 때 제 컴퓨터환경이 끊기면서 듣게돼서 달레님 의도와 다르게 적용했을수도 있을거 같아 코멘트 남깁니다.
두분의 리뷰를 코드에 적용해보니 결국 https://www.algodale.com/problems/palindromic-substrings/ 의 3번째 솔루션으로 가는걸 발견했습니다.
피드백 감사합니다 :)