알고리즘

📌 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로 설정하여 단어의 끝임을 표시.검색..
📌 LeetCode [15]: 3Sum🔗 문제 링크문제 설명 📄정수 배열 nums가 주어졌을 때, 세 수의 합이 0이 되는 모든 고유한 조합을 반환하는 문제입니다.각 조합은 중복되지 않아야 하며, 순서는 상관없습니다.출력은 리스트의 형태로 반환해야 합니다.문제 접근 방식 📋정렬된 배열 활용:배열을 정렬하여 중복 조합을 제거하기 쉽고, 탐색 범위를 줄일 수 있습니다.투 포인터 사용:첫 번째 숫자를 고정한 후, 나머지 두 수를 투 포인터로 찾습니다.투 포인터를 활용하면 두 수의 합을 효율적으로 계산할 수 있습니다.중복 제거:동일한 숫자가 연속으로 나오는 경우 건너뛰어 중복된 조합을 제거합니다.결과는 set을 사용해 중복 방지.Solution 💻class Solution: def threeSum..
📌 LeetCode [49]: Group Anagrams🔗 문제 링크문제 설명 📄문자열 배열 strs가 주어질 때, 애너그램(Anagram) 관계인 문자열들을 그룹으로 묶는 문제입니다.애너그램: 단어를 구성하는 문자들이 동일하지만 순서가 다른 경우.각 그룹은 문자열 배열로 반환하며, 그룹 내 문자열의 순서는 중요하지 않습니다.문제 접근 방식 📋문자 빈도 기반 분류:애너그램은 단어를 구성하는 문자의 종류와 개수가 동일합니다.따라서 collections.Counter를 사용해 문자열의 문자 빈도를 계산하고, 이를 기반으로 그룹을 생성할 수 있습니다.Key로 frozenset 사용:frozenset은 변경 불가능한 자료형으로, Counter의 (문자, 빈도)를 키로 사용하여 그룹화할 수 있습니다.효율성..
📌 LeetCode [121]: Best Time to Buy and Sell Stock🔗 문제 링크문제 설명 📄주어진 주식 가격 배열 prices에서 주식을 한 번 사고 한 번 팔았을 때 얻을 수 있는 최대 이익을 계산하는 문제입니다.주식은 미래의 가격을 알 수 없으므로 한 번만 사고, 한 번만 팔 수 있습니다.주식은 반드시 산 이후에 팔아야 합니다.문제 접근 방식 📋최소 가격과 최대 가격 관리:배열을 순회하며 최소 가격(minIndex)과 최대 가격(maxIndex)를 갱신합니다.최소 가격 이후에 최대 가격이 나타나는 경우만 이익을 계산합니다.효율성:배열을 한 번 순회하며 최대 이익을 계산하므로, 시간 복잡도는 O(n)입니다.Solution 💻class Solution: def maxP..
개발하는 장씨
'알고리즘' 카테고리의 글 목록 (13 Page)