LeetCode 329

383. Ransom Note

383. Ransom Note class Solution: def canConstruct(self, ransomNote: str, magazine: str) -> bool: # magazine에 있는 문자들의 빈도를 저장할 딕셔너리 countM = {} # magazine 문자열에서 각 문자의 빈도를 계산 for c in magazine: countM[c] = 1 + countM.get(c, 0) # 딕셔너리에 c가 없으면 기본값은 0 # ransomNote 문자열의 각 문자를 확인 for w in ransomNote: # 현재 문자가 magazine에서 충분히 남아있는지 확인 ..

48. Rotate Image

48. Rotate Image https://youtu.be/fMSJSS7eO1w?si=XXhhhqR7m4_ogJ2l https://youtu.be/I5WtA1Pax7Q?si=B9ySN5uPTH9Huk8R from typing import Listclass Solution: def rotate(self, matrix: List[List[int]]) -> None: """ 주어진 n x n 2D 행렬을 90도 시계 방향으로 회전합니다. 이 작업은 제자리에서(in-place) 수행되어야 하며, 추가적인 2D 배열을 사용할 수 없습니다. """ l, r = 0, len(matrix) - 1 # 왼쪽과 오른쪽 경계를 설정 whil..

[Top150] 36. Valid Sudoku ★★★

36. Valid Sudoku https://youtu.be/TjFXEUCMqI8?si=mfzpl_jlRUHMsnOR from typing import Listimport collectionsclass Solution: def isValidSudoku(self, board: List[List[str]]) -> bool: # 각 열에 있는 숫자를 추적하기 위한 딕셔너리 (기본값은 set) cols = collections.defaultdict(set) # 각 행에 있는 숫자를 추적하기 위한 딕셔너리 (기본값은 set) rows = collections.defaultdict(set) # 각 3x3 서브그리드에 있는 숫자를 추적하기 위한 딕셔..

LeetCode/Grind169 2024.11.30

[Sliding Window Variable Size] 3. Longest Substring Without Repeating Characters

3. Longest Substring Without Repeating Characters 최종 코드https://youtu.be/wiGpQwVHdE0?si=b-6NK2xTHLhlVE5- 이 문제는 슬라이딩 윈도우 기법을 사용해서 효율적으로 풀 수 있어요.핵심 아이디어는: 중복 문자가 없을 때까지 윈도우를 오른쪽으로 확장하고,중복 문자가 나오면 왼쪽 포인터를 이동시켜 중복을 제거하는 거예요. 🧠 예제 설명예제 1: "zxyzxyz""zxy" (길이 3)까지는 중복 없음 → 계속 확장"zxyz"에서 다시 'z' 중복 → "xyz"부터 다시 시작가장 긴 중복 없는 부분은 "xyz" → 정답: 3✅ 시간복잡도O(n) (n은 문자열 길이)각 문자는 최대 한 번씩 set에서 추가/제거됨 class Solution..

LeetCode/NeetCode 2024.11.29

[Two Pointers] 125. Valid Palindrome

125. Valid Palindrome 내 코드 class Solution: def isPalindrome(self, s: str) -> bool: """ isalnum은 **"is alphabetic or numeric"**의 약자로, 알파벳 또는 숫자인지 확인하는 메서드입니다. - is: "인지 확인"을 의미 (True/False 결과 반환). - al: alphabetic(알파벳)의 약자. - num: numeric(숫자)의 약자. 숫자 이거나 알파벳이면 True isdigit(): 숫자인지 확인 """ only_alnum = "" for w in s: ..

LeetCode/NeetCode 2024.11.28