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

[mangodm-web] Week 01 Solutions #320

Merged
merged 4 commits into from
Aug 18, 2024
Merged

Conversation

mangodm-web
Copy link
Contributor

@mangodm-web mangodm-web commented Aug 13, 2024

문제 풀이 현황

문제별 내용 정리

안녕하세요, 문제 풀이 내용을 간단하게 정리해보았습니다.
많은 피드백 부탁 드립니다.. 🙇‍♀️
문제 #252 번은 좀 더 고민해보고 싶어서 백로그로 남겨두고, 다음 PR에 같이 올려보겠습니다..!

01. Contains Duplicate

접근 방법

주어진 배열을 Set으로 변환한 후, 배열의 길이와 Set의 길이를 비교하여 중복되는 요소가 있는지를 판단하였습니다.

알고리즘 분석

주어진 배열의 길이를 n이라 할때,

  • 시간 복잡도: O(n), 배열의 각 요소를 Set에 추가할 때 중복을 확인하고, 요소를 추가하는 데 모든 요소에 대해서 한번씩 처리해야 합니다.
  • 공간 복잡도: O(n), 최악의 경우(모든 요소가 고유할 때), Set에는 n개의 요소가 저장됩니다.

02. Number of 1 Bits

접근 방법

주어진 정수(n)의 각 비트를 확인하여 1인 비트의 개수를 재귀적으로 세는 함수를 작성하였습니다.
1의 개수는 acc라는 변수에 누적한 뒤, 최종적으로 반환합니다.

알고리즘 분석

주어진 정수를 n이라 할 때,

  • 시간 복잡도: O(logn), 입력으로 받은 정수 n을 2로 나뉘면서 재귀적으로 호출하므로, 매 호출마다 n의 크기는 절반으로 줄어듭니다.
  • 공간 복잡도: O(logn), 공간 복잡도는 재귀 호출의 깊이에 따라 결정됩니다. 최대 재귀 깊이는 log(n)이므로, 공간 복잡도는 O(logn)입니다.

03. Top K Frequent Elements

접근 방법

각 요소의 빈도를 계산하고, 이 빈도를 인덱스로 사용하는 일종의 버킷을 만들어 문제를 해결했습니다.
가장 많이 등장하는 k를 추출해야 하기 때문에 빈도가 높은 순서대로 버킷을 조회하여 효율성을 높였습니다.

알고리즘 분석

주어진 숫자 배열(nums)의 길이를 n이라 할 때,

  • 시간 복잡도: O(n), 각 요소의 빈도 계산, 빈도 기반 버킷 생성, 가장 많이 등장하는 k를 추출하는 과정 모두 최대 O(n)의 복잡도를 가집니다.
  • 공간 복잡도: O(n), 빈도 사전, 빈도 기반 버킷을 생성하는 과정에서 최대 O(n)의 공간이 사용될 수 있습니다.

05. Palindromic Substrings

접근 방법

팰린드롬은 중심 문자를 기준으로 좌, 우가 동일한 문자열을 말합니다.
다만, 팰린드롬인지 판별할 문자열의 길이가 홀수인지, 짝수인지에 따라서 중심 문자의 기준이 달라집니다.

  • aba => b가 중심
  • abba => bb가 중심
    이러한 특성을 이용하여 중심 문자를 기준으로 좌, 우로 확장해나가면서 팰린드롬의 총 개수를 파악하도록 하였습니다.

알고리즘 분석

주어진 문자열(s)의 길이를 n이라 할 때,

  • 시간 복잡도: O(n^2), 내부적으로 투포인터를 이용하는 countPalindrome 함수는 최악의 경우 O(n)번만큼 연산이 이뤄집니다. 이 함수는 문자열의 길이(n)만큼의 순회를 하면서 호출되기 때문에 시간 복잡도는 O(n^2)라고 할 수 있습니다.
  • 공간 복잡도: O(1), 인덱스 변수나 total_count 변수만 추가적으로 사용되기 때문에 공간 복잡도는 O(1)이라고 판단하였습니다.

@mangodm-web mangodm-web marked this pull request as draft August 13, 2024 14:48
Copy link
Contributor

Choose a reason for hiding this comment

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

나머지 문제를 다 푸신후, 해당 문제를 O(n)으로 푸는 방법도 고민해보시면 좋을 것 같습니다 :)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

코멘트 감사합니다! 🙏
지금 당장 떠오르는 방법은 없지만, 좀 고민해볼게요... 🤔

Copy link
Contributor

Choose a reason for hiding this comment

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

혹시 이진연산에 대해서 배운적 있으실까요? 해당 방법으로 문제를 푼다면 해결하실 수 있을겁니다 😄

Copy link
Contributor Author

Choose a reason for hiding this comment

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

오.. 힌트 감사합니다. 도전해볼게요! 😄

@mangodm-web mangodm-web added the py label Aug 15, 2024
@mangodm-web mangodm-web marked this pull request as ready for review August 17, 2024 15:14
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.

수고 많으셨습니다! 4문제 푸신 것도 잘 하신 거에요. 모임 전에 PR 병합 부탁드리겠습니다.

@mangodm-web mangodm-web merged commit 8ed4e81 into DaleStudy:main Aug 18, 2024
@mangodm-web mangodm-web changed the title [DM] Week 01 Solutions [mangodm-web] Week 01 Solutions Aug 21, 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.

3 participants