Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
29 changes: 29 additions & 0 deletions longest-repeating-character-replacement/Seoya0512.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@

'''
2개의 포인터를 활용해 슬라이딩 윈도우 방식으로 문제를 해결
(접근법은 알고 있었지만 구현이 어려워 알고달레 참고)

참고
end-start+1-max(counter.values())는 윈도우를 전부 같은 문자로 만들기 위해 바꿔야 하는 최소 문자 수
즉, 그 값이 K개 이상 필요하면 유효하지 않은 것으로 판단함


Time Complexity: O(n)
- 문자열의 모든 문자를 한 번씩 방문
Space Complexity: O(1)
-
'''
class Solution:
def characterReplacement(self, s: str, k: int) -> int:
max_len = 0
counter = {}
start = 0

for end in range(len(s)):
counter[s[end]] = counter.get(s[end], 0) + 1
while end - start + 1 - max(counter.values()) > k:
counter[s[start]] -= 1
start +=1
max_len = max(end-start+1, max_len)

return max_len
53 changes: 53 additions & 0 deletions palindromic-substrings/Seoya0512.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
'''
방식 : Brute-Force
문자에 two-pointer를 지정해서 모든 경우의 수를 확인하고
palindrome의 수를 반환

Time Complexity : O(N^3)
- outer loop(For문) : O(N)
- inner loop(While문) : O(N)
- palindrome 확인을 위해 s[start:end] 슬라이싱 및 역순 확인 : O(N)

Space Complexity: O(N)
- substring을 임시 저장하는데 드는 공간 비용
'''

class Solution:
def countSubstrings(self, s: str) -> int:
cnt = 0
n = len(s)

for start in range(n):
end = n
while start < end:
sub = s[start:end]
if sub == sub[::-1]:
cnt += 1
end -= 1

return cnt

'''
위 풀이로 해결했지만, 시간복잡도가 많이 드는 것을 파악 후
알고달레 풀이 3: Two Pointers 이해하고 작성한 코드

while 문을 2회로 나눈 이유는 aa, baab 형식의 짝수 palindrome을 파악하기 위함
짝수 palindrome의 경우 양 옆의 값이 동일해야 그 값을 기준으로 좌우 값을 비교해서 판단할 수 있음
'''
def countSubstrings(s: str) -> int:
cnt = 0

for i in range(0, len(s)):
start, end = i,i
while start >= 0 and end < len(s) and s[start] == s[end]:
cnt += 1
start -=1
end +=1

start, end = i, i+1
while start >= 0 and end < len(s) and s[start] == s[end]:
cnt += 1
start -=1
end +=1

return cnt
10 changes: 10 additions & 0 deletions reverse-bits/Seoya0512.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
'''
파이썬 내장 함수 사용
- format 함수로 정수 n을 32비트 이진수로 변환한 뒤, 역수로 뒤집어 다시 정수로 변환

Time Complexity: O(1)
Space Complexity: O(1)
'''
class Solution:
def reverseBits(self, n: int) -> int:
return int(format(n,'032b')[::-1], 2)