-
Notifications
You must be signed in to change notification settings - Fork 126
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
[EGON] Week15 Solutions #609
Conversation
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.
수고하셨습니다 Egon님!! 15주가 금방 지나갔네요, 앞으로도 연이 닿는다면 같이 공부할 기회가 있으면 좋겠습니다 ㅎㅎㅎ
몇가지 질문사항 남겨두었습니다
Time Complexity: O(n ^ 3) | ||
- s의 길이를 n이라 하면, s의 길이 - 1 만큼 조회하는데 O(n - 1) | ||
- 각 문자마다 sliding_window를 2회 호출하는데, 각 호출마다 최대 s의 길이만큼 반복하므로, * 2 * O(n), upper bound | ||
- 반복 후 s를 slicing하는데 최대 * O(n), upper bound |
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.
저는 이 부분의 시간복잡도가 좀 아깝게 느껴졌습니다
str slicing이 꽤 무거운 연산인 것으로 보이는데, 시작과 끝 인덱스를 반환하는 방식으로 sliding_window함수를 수정하면 시간복잡도를 3차원에서 2차원까지 낮출 수 있을 것 같아요 :)
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.
저는 이 부분의 시간복잡도가 좀 아깝게 느껴졌습니다 str slicing이 꽤 무거운 연산인 것으로 보이는데, 시작과 끝 인덱스를 반환하는 방식으로 sliding_window함수를 수정하면 시간복잡도를 3차원에서 2차원까지 낮출 수 있을 것 같아요 :)
이전에 이 문제를 풀었던 적이 있어서 기존 모범 답안을 그대로 제출했는데, 실행 환경에 따른 GC 호출 차이 때문인지 문자열 슬라이싱을 미리해서 리턴하면 훨씬 메모리가 좋더라고요. 시간복잡도는 투 포인터로 풀면 나아지는건 맞긴한데, 애초에 팰린드롬 문제 자체의 제약사항이 1000자 아래여서 별 차이가 없는 걸 알고있긴 했습니다.
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.
@obzva manacher 알고리즘도 이번에 알게되어서 추가해봤는데 한 번 보시면 도움되실 것 같아 남깁니다 :)
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.
그렇군요 ㅎㅎㅎ 그런 이유라면 에곤님 본래의 풀이가 더 합리적인 선택 같습니다
Time Complexity: O(n ^ 3) | ||
- s의 길이를 n이라 하면, s의 길이 - 1 만큼 조회하는데 O(n - 1) | ||
- 각 문자마다 sliding_window를 2회 호출하는데, 각 호출마다 최대 s의 길이만큼 반복하므로, * 2 * O(n), upper bound | ||
- 반복 후 s를 slicing하는데 최대 * O(n), upper bound |
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.
저는 이 부분의 시간복잡도가 좀 아깝게 느껴졌습니다
str slicing이 꽤 무거운 연산인 것으로 보이는데, 시작과 끝 인덱스를 반환하는 방식으로 sliding_window함수를 수정하면 시간복잡도를 3차원에서 2차원까지 낮출 수 있을 것 같아요 :)
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.
그럼 공간복잡도도 O(1)으로 자연스레 개선될 것 같아요
|
||
""" | ||
Runtime: 0 ms (Beats 100.00%) | ||
Time Complexity: O(n ^ 2) |
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.
기막힌 풀이네요 ㅋㅋㅋ 잘 배웠습니다!!
subtree-of-another-tree/EGON.py
Outdated
Space Complexity: O(max(n, m)) | ||
- stack의 최대 크기는 root 트리가 편향된 경우이며, 이는 root 트리의 노드의 총 갯수와 같으므로 O(n), upper bound | ||
- is_same_tree 함수의 재귀 스택의 최대 깊이는 subRoot 트리가 편향된 경우이며, 이는 subRoot 트리의 노드의 총 갯수와 같으므로 O(m), upper bound | ||
> O(n) + O(m) ~= O(max(n, m)) |
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.
제가 좌변까지는 이해했는데 우변으로 이어지는 논리는 이해하지 못했습니다 @lymchgmk 님 ㅜ
혹시 O(N + M) ~= O(max(N, M)) 이 되는 이유에 대해 설명 부탁드려도 될까요?
제 생각엔, 스택의 공간복잡도와 is_same_tree의 공간복잡도는 독립적인 것 같아서 O(N + M)이라고 봐야 할 것 같아서요 😵💫
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.
제가 좌변까지는 이해했는데 우변으로 이어지는 논리는 이해하지 못했습니다 @lymchgmk 님 ㅜ 혹시 O(N + M) ~= O(max(N, M)) 이 되는 이유에 대해 설명 부탁드려도 될까요? 제 생각엔, 스택의 공간복잡도와 is_same_tree의 공간복잡도는 독립적인 것 같아서 O(N + M)이라고 봐야 할 것 같아서요 😵💫
말씀하신 것 처럼 둘이 독립인게 맞습니다. O(n + m)으로 수정하겠습니다. 감사합니다.
답안 제출 문제
체크 리스트
In Review
로 설정해주세요.