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

[정현준] 10주차 #538

Merged
merged 3 commits into from
Oct 19, 2024
Merged

[정현준] 10주차 #538

merged 3 commits into from
Oct 19, 2024

Conversation

jdalma
Copy link
Member

@jdalma jdalma commented Oct 16, 2024

답안 제출 문제

체크 리스트

  • PR을 프로젝트에 추가하고 Week를 현재 주차로 설정해주세요.
  • 바로 앞에 PR을 열어주신 분을 코드 검토자로 지정해주세요.
  • 문제를 모두 푸시면 프로젝트에서 Status를 In Review로 설정해주세요.
  • 코드 검토자 1분 이상으로부터 승인을 받으셨다면 PR을 병합해주세요.

@jdalma jdalma marked this pull request as ready for review October 18, 2024 05:10
@jdalma jdalma requested a review from a team as a code owner October 18, 2024 05:10
return mid
}
if (nums[low] <= nums[mid]) {
if (target in nums[low] .. nums[mid]) {
Copy link
Contributor

Choose a reason for hiding this comment

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

코틀린을 모르는 입장에서 이부분이 순회처럼 보이는데 단순 비교라서 O(1)라는게 신기하네요

Copy link
Member Author

@jdalma jdalma Oct 19, 2024

Choose a reason for hiding this comment

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

저도 순회하는 것 처럼 보이길래 자바로 디컴파일해보니 조건문으로 적용되더라구요 ㅎㅎ

 int var10000;
 int var10002;
 if (nums[low] <= nums[mid]) {
    var10000 = nums[low];
    var10002 = nums[mid];
    if (var10000 <= target) {
       if (var10002 >= target) {
          high = mid;
          continue;
       }
    }

    low = mid;
 } else {
    var10000 = nums[mid];
    var10002 = nums[high];
    if (var10000 <= target) {
       if (var10002 >= target) {
          low = mid;
          continue;
       }
    }

    high = mid;
 }

}

/**
* TC: O(lists.size * ListNode.size), SC: O(lists.size)
Copy link
Contributor

Choose a reason for hiding this comment

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

분할정복 방식에서 시간 복잡도는 O( log(lists.size) * listNode.size))가 걸리지 않을까요?
공간복잡도도 O( log(lists.size) )가 아닐까 싶습니다!

Copy link
Member Author

@jdalma jdalma Oct 19, 2024

Choose a reason for hiding this comment

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

흠 말씀해주셔서 다시 생각해보니 SC는 콜 스택 깊이가 절반으로 줄어들어서 log로 볼 수 있을 것 같네요
TC는 mergeLists풀이와 merge()를 호출하는 방법만 달라지고 노드 비교 횟수는 동일하다고 생각되어서 log가 아닌 것 같다고 생각했습니다 ㅎㅎ

Copy link
Contributor

@HC-kang HC-kang left a comment

Choose a reason for hiding this comment

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

@jdalma 님 이번 한 주도 고생하셨습니다~
코틀린 코드는 매번 볼 때 마다 새로운게 보이네요

/**
* TC: O(n), SC: O(n)
*/
private fun usingDFS(node: TreeNode?): TreeNode? {
Copy link
Contributor

Choose a reason for hiding this comment

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

저는 inorder traversal 로 풀었는데 문제의 핵심인 왼쪽과 오른쪽을 바꾼다를 잘 해석하신거같아 좋은 풀이같아요 👍

degree[course]++
}

val queue = ArrayDeque<Int>().apply {
Copy link
Contributor

Choose a reason for hiding this comment

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

while문을 순회하며 로직을 순차적으로 진행하기 위해 queue특성을 활용한걸로 이해가 되요. 그런의미에서 dequeue를 사용하신 이유가 궁금합니다!

Copy link
Member Author

Choose a reason for hiding this comment

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

말씀하신대로 단순히 Queue의 특성을 이용하고 싶어서 사용하였는데 내부 구현의 차이점을 확실히 이해하고 있진 않지만 ArrayDeque가 LinkedList보다 빠르다는 말이 있어서 Queue를 사용할 때는 항상 ArrayDeque를 사용했습니다 ㅎㅎ
한번 구현을 확인해 볼 필요도 있겠네요 ㅎㅎ

이 클래스는 스택으로 사용할 경우 Stack 보다 빠르고, 큐로 사용할 경우 LinkedList 보다 빠를 가능성이 높습니다.
ArrayDeque

@jdalma jdalma merged commit a3c9195 into DaleStudy:main Oct 19, 2024
1 check passed
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.

3 participants