Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions contains-duplicate/heypaprika.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Big-O 예상 : O(n*k)
Copy link
Contributor

Choose a reason for hiding this comment

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

안녕하세요 ☺️
일반적으로 Big O 분석을 한다고 하면 해당 풀이의 시간 복잡도와 공간 복잡도를 분석하는 것을 뜻합니다
따라서 해당 Big O 표기가 어느 부분에 관한 분석인지 적어주시는 것이 좋을 것 같아요
또한 Big O 표기에 n, k 이렇게 두 개의 변수가 쓰이고 있는데, 각각의 변수가 어떤 걸 의미하고 있는지 적어주시면 좋을 것 같습니다 ㅎㅎ
위키에 모범 답안제출 사례들을 참고하시길 추천 드립니다

Copy link
Contributor Author

Choose a reason for hiding this comment

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

네~ 피드백 감사드립니다!!

class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
num_dict = {}
for num in nums:
Copy link
Contributor

Choose a reason for hiding this comment

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

입력받은 List는 정렬되지 않은 상태이기 때문에 중복된 요소간의 List내 위치가 많이 멀 경우 시간복잡도가 안좋게 잡힐 가능성이 커서 정렬한 상태에서 비교하는건 어떨까요?

if num in num_dict:
return True
else:
num_dict[num] = 1
return False

19 changes: 19 additions & 0 deletions house-robber/heypaprika.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Big-O 예상 : O(n)
class Solution:
def rob(self, nums: List[int]) -> int:
a = [0] * len(nums)

if len(nums) == 1:
return nums[0]
elif len(nums) == 2:
return max(nums[0], nums[1])

a[0] = nums[0]
a[1] = nums[1]
a[2] = max(a[0] + nums[2], a[1])

for i in range(3, len(nums)):
a[i] = max(a[i-3], a[i-2]) + nums[i]

return max(a)

22 changes: 22 additions & 0 deletions longest-consecutive-sequence/heypaprika.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Big-O 예상 : O(nlog(n))
class Solution:
def longestConsecutive(self, nums: List[int]) -> int:
nums = sorted(list(set(nums)))
if len(nums) == 0:
return 0
elif len(nums) == 1:
return 1
Comment on lines +5 to +8
Copy link
Contributor

Choose a reason for hiding this comment

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

(사소) nums 길이가 1이하면 sorting하기 전에도 결과를 반환할 수 있어서 가지치기 느낌으로 longestConsecutive 내 최상단에 두면 더 좋아보입니다.

cur_long = 1
longest = 1
for i, num in enumerate(nums):
if i == 0:
continue
else:
if nums[i-1] + 1 == nums[i]:
cur_long += 1
if longest < cur_long:
longest = cur_long
else:
cur_long = 1
return longest

16 changes: 16 additions & 0 deletions top-k-frequent-elements/heypaprika.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Big-O 예상 : O(nlog(n))
import heapq
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:

num_dict = {}
for num in nums:
num_dict[num] = num_dict.get(num, 0) + 1
heap = []
for k_, v in num_dict.items():
heapq.heappush(heap, [-v, k_])
ans = []
for i in range(k):
ans.append(heapq.heappop(heap)[1])
return ans

15 changes: 15 additions & 0 deletions valid-palindrome/heypaprika.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Big-O 예상 : O(n)
class Solution:
def isPalindrome(self, s: str) -> bool:
s = "".join(s.lower().split(" "))
new_s = ""
for item in s:
if (ord("a") <= ord(item) <= ord("z")) or (ord("0") <= ord(item) <= ord("9")):
new_s += item
output = True
for i in range(len(new_s) // 2):
if new_s[i] != new_s[-i-1]:
output = False
break
return output

Loading