📌 LeetCode [206]: Reverse Linked List🔗 문제 링크문제 설명 📄주어진 단일 연결 리스트를 역순으로 뒤집고, 뒤집힌 리스트의 시작 노드를 반환하는 문제입니다.문제 접근 방식 📋포인터 기반 반복 접근:prev를 사용하여 이전 노드를 추적하고, 현재 노드의 next를 이전 노드로 바꿉니다.temp로 다음 노드를 임시 저장하여 연결을 끊어도 순회를 유지합니다.종료 조건:마지막 노드에 도달한 뒤, 역순으로 바뀐 리스트의 시작 노드인 head를 반환합니다.Solution 💻class Solution: def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: prev = None ..
알고리즘/리트코드
📌 LeetCode [83]: Remove Duplicates from Sorted List🔗 문제 링크문제 설명 📄주어진 정렬된 단일 연결 리스트에서 연속된 중복 노드를 제거하고, 각 값이 하나씩만 나타나는 연결 리스트를 반환하는 문제입니다.예제 입력/출력입력: head = [1, 1, 2]출력: [1, 2]입력: head = [1, 1, 2, 3, 3]출력: [1, 2, 3]제약 조건노드의 개수는 0 입니다.리스트의 값은 -100 이며, 정렬된 상태로 주어집니다.문제 접근 방식 📋정렬된 리스트의 특성 활용:리스트가 정렬되어 있으므로, 현재 노드와 다음 노드의 값만 비교하면 중복 여부를 알 수 있습니다.연속된 중복 노드 제거:현재 노드와 다음 노드의 값이 같으면, 현재 노드의 next를 수정하여..
📌 LeetCode [59]: Spiral Matrix II🔗 문제 링크문제 설명 📄정수 ( n )이 주어질 때, ( n \times n ) 크기의 나선형 행렬을 생성하여 반환하는 문제입니다. 행렬은 1부터 ( n^2 )까지의 숫자로 채워집니다.예제 입력/출력입력: ( n = 3 )출력:[[1, 2, 3], [8, 9, 4], [7, 6, 5]]문제 접근 방식 📋2D 행렬 초기화:( n \times n ) 크기의 행렬을 0으로 초기화합니다.나선형으로 값 채우기:top, bottom, left, right 경계를 설정하여 나선형으로 값을 채웁니다.각 방향(오른쪽, 아래, 왼쪽, 위)으로 이동할 때마다 경계를 업데이트합니다.반복문 종료 조건:top > bottom 또는 left > right가 되면 ..
📌 LeetCode [54]: Spiral Matrix🔗 문제 링크문제 설명 📄2D 행렬 matrix가 주어질 때, 나선형(spiral) 순서대로 배열의 모든 요소를 반환하는 문제입니다.문제 접근 방식 📋경계 값 관리:top, bottom, left, right 경계를 설정하여 나선형으로 배열을 순회.각 방향(오른쪽, 아래, 왼쪽, 위)으로 이동할 때마다 경계를 업데이트.각 방향으로 반복문 순회:오른쪽: top 경계의 행을 순회.아래: right 경계의 열을 순회.왼쪽: bottom 경계의 행을 역순으로 순회.위: left 경계의 열을 역순으로 순회.조건 검증:각 방향으로 이동하기 전에 남은 경계 조건(top , left )을 확인.Solution 💻class Solution: def sp..
📌 LeetCode [211]: Design Add and Search Words Data Structure🔗 문제 링크문제 설명 📄WordDictionary라는 클래스를 설계해야 합니다. 이 클래스는 다음 두 가지 기능을 포함합니다:단어 추가 (addWord): 단어를 데이터 구조에 추가.단어 검색 (search): 특정 단어가 존재하는지 확인.와일드카드 .는 어떤 문자와도 매칭 가능.문제 접근 방식 📋Trie(접두사 트리) 사용:addWord는 단어를 Trie에 삽입.search는 와일드카드를 처리하며 Trie를 탐색.와일드카드 처리:.는 모든 자식 노드를 탐색해야 하므로 재귀적으로 탐색.효율성 고려:일반 검색은 Trie를 통해 빠르게 이루어짐.와일드카드가 포함된 검색은 재귀 호출로 해결.So..
📌 LeetCode [11]: Container With Most Water🔗 문제 링크문제 설명 📄길이가 ( n )인 정수 배열 height가 주어질 때, 두 막대를 선택하여 담을 수 있는 물의 최대량을 구하는 문제입니다.물의 양은 다음과 같이 계산됩니다:물의 양 = ( 너비 × 낮은 막대의 높이 )두 막대의 위치에 따른 너비는 두 막대의 인덱스 차이로 계산됩니다.예:height = [1,8,6,2,5,4,8,3,7]최대 물의 양은 49이며, 이는 막대 height[1]과 height[8]에서 나옵니다.문제 접근 방식 📋두 포인터 사용:left와 right 포인터를 배열의 양 끝에 위치.각 포인터는 배열의 양 끝에서부터 중앙으로 이동하며 최대 물의 양을 계산.물의 양 계산:현재 너비 = righ..
📌 LeetCode [20]: Valid Parentheses🔗 문제 링크문제 설명 📄여러 종류의 괄호((), {}, [])로 이루어진 문자열 s가 주어질 때, 문자열이 올바른 괄호 문자열인지 판단하는 문제입니다.올바른 괄호 문자열의 조건:괄호는 반드시 짝을 이루어야 한다.괄호는 열리고 닫히는 순서가 올바르다.문제 접근 방식 📋스택 활용:여는 괄호((, {, [): 스택에 추가.닫는 괄호(), }, ]): 스택에서 가장 최근의 여는 괄호를 꺼내서 짝이 맞는지 확인.조건 검증:닫는 괄호가 나왔을 때 스택이 비어 있으면 짝이 맞지 않으므로 False.모든 괄호를 처리한 후, 스택에 남아 있는 여는 괄호가 있으면 False.최종 결과:문자열을 끝까지 처리했을 때 스택이 비어 있으면 올바른 괄호 문자열...
📌 LeetCode [208]: Implement Trie (Prefix Tree)🔗 문제 링크문제 설명 📄Trie(접두사 트리) 자료 구조를 설계하고 다음 기능을 구현하는 문제입니다:insert(word: str): 단어를 트리에 삽입.search(word: str): 정확히 일치하는 단어가 있는지 확인.startsWith(prefix: str): 주어진 접두사로 시작하는 단어가 있는지 확인.문제 접근 방식 📋Trie 구조 설계:각 노드는 다음을 포함:children: 현재 노드의 자식 노드들 (문자 → Node).is_end: 현재 노드가 단어의 끝인지 여부.삽입 (insert):단어의 각 문자를 따라가며 노드를 생성.마지막 노드에서 is_end = True로 설정하여 단어의 끝임을 표시.검색..