슬라이딩 윈도우 문제
Easy
- Maximum Average Subarray I (LeetCode 643)
설명: 고정 크기 윈도우의 평균 값 중 최대값을 찾습니다.
핵심 개념: 슬라이딩 윈도우. - Find All Anagrams in a String (LeetCode 438)
설명: 문자열에서 모든 애너그램의 시작 인덱스를 찾습니다.
핵심 개념: 슬라이딩 윈도우, 해시맵. - Contains Duplicate II (LeetCode 219)
설명: 배열에서 특정 거리 내에서 중복값이 존재하는지 확인합니다.
핵심 개념: 슬라이딩 윈도우, 해시맵. - Longest Substring Without Repeating Characters (LeetCode 3)
설명: 중복 없는 가장 긴 부분 문자열을 찾습니다.
핵심 개념: 슬라이딩 윈도우, 투 포인터. - Minimum Size Subarray Sum (LeetCode 209)
설명: 합이 특정 값 이상이 되는 최소 크기의 부분 배열을 찾습니다.
핵심 개념: 슬라이딩 윈도우, 투 포인터. - Find Pivot Index (LeetCode 724)
설명: 배열에서 왼쪽과 오른쪽 합이 같은 인덱스를 찾습니다.
핵심 개념: 슬라이딩 윈도우, prefix sum. - Substrings of Size Three with Distinct Characters (LeetCode 1876)
설명: 고정 크기 3의 윈도우에서 모든 문자가 서로 다른 부분 문자열의 개수를 셉니다.
핵심 개념: 슬라이딩 윈도우, 해시맵. - Reverse Prefix of Word (LeetCode 2000)
설명: 특정 문자까지의 문자열 접두사를 뒤집습니다.
핵심 개념: 슬라이딩 윈도우. - Replace Elements with Greatest Element on Right Side (LeetCode 1299)
- Check If All Characters Have Equal Frequency (LeetCode 2423)
- Find Subarrays With Equal Sum (LeetCode 2395)
- Find Pivot Index (LeetCode 724)
- Can Place Flowers (LeetCode 605)
Medium
- Subarray Product Less Than K (LeetCode 713)
설명: 곱이 K보다 작은 부분 배열의 개수를 구합니다.
핵심 개념: 슬라이딩 윈도우, 곱셈. - Permutation in String (LeetCode 567)
설명: 문자열의 순열이 다른 문자열에 포함되는지 확인합니다.
핵심 개념: 슬라이딩 윈도우, 해시맵. - Longest Repeating Character Replacement (LeetCode 424)
설명: 특정 문자를 교체하여 가장 긴 반복 문자열을 만듭니다.
핵심 개념: 슬라이딩 윈도우, 투 포인터. - Fruit Into Baskets (LeetCode 904)
설명: 두 종류의 과일만 포함하는 가장 긴 부분 배열을 찾습니다.
핵심 개념: 슬라이딩 윈도우, 해시맵. - Sliding Window Maximum (LeetCode 239)
설명: 고정 크기 윈도우에서 최대값을 찾습니다.
핵심 개념: 슬라이딩 윈도우, 덱. - Grumpy Bookstore Owner (LeetCode 1052)
설명: 고객이 화를 내는 시간을 조절하여 최대 매출을 계산합니다.
핵심 개념: 슬라이딩 윈도우. - Max Consecutive Ones III (LeetCode 1004)
설명: 최대 K개의 0을 뒤집어 1의 연속 배열 길이를 최대화합니다.
핵심 개념: 슬라이딩 윈도우, 투 포인터. - Minimum Size Subarray Sum (LeetCode 209)
설명: 합이 특정 값 이상이 되는 최소 크기의 부분 배열을 찾습니다.
핵심 개념: 슬라이딩 윈도우, 투 포인터. - Grumpy Bookstore Owner (LeetCode 1052)
- Binary Subarrays With Sum (LeetCode 930)
- Longest Substring with At Most Two Distinct Characters (LeetCode 159)
- Substrings of Size Three with Distinct Characters (LeetCode 1876)
RabinKarp 문자열 탐색 문제
Easy
- Implement strStr() (LeetCode 28)
설명: 문자열에서 특정 패턴의 시작 인덱스를 찾습니다.
핵심 개념: Rabin-Karp 알고리즘. - Repeated Substring Pattern (LeetCode 459)
설명: 문자열이 반복되는 패턴으로 구성되어 있는지 확인합니다.
핵심 개념: Rabin-Karp, 문자열 해싱. - Find the Difference (LeetCode 389)
설명: 두 문자열의 차이점을 찾습니다.
핵심 개념: Rabin-Karp, 해싱. - Reverse Prefix of Word (LeetCode 2000)
Medium
- Longest Duplicate Substring (LeetCode 1044)
설명: 문자열에서 가장 긴 중복된 부분 문자열을 찾습니다.
핵심 개념: Rabin-Karp, 롤링 해시, 이진 탐색. - Substring with Concatenation of All Words (LeetCode 30)
설명: 문자열에서 모든 단어의 순열로 이루어진 부분 문자열의 시작 인덱스를 찾습니다.
핵심 개념: Rabin-Karp, 슬라이딩 윈도우. - Check If a String Contains All Binary Codes of Size K (LeetCode 1461)
설명: 문자열에 특정 길이 K의 모든 이진 문자열이 포함되어 있는지 확인합니다.
핵심 개념: Rabin-Karp, 해싱. - Minimum Window Substring (LeetCode 76)
설명: 문자열에서 특정 패턴을 포함하는 가장 짧은 부분 문자열을 찾습니다.
핵심 개념: Rabin-Karp, 슬라이딩 윈도우. - Smallest Subsequence of Distinct Characters (LeetCode 1081)
- Count Unique Characters of All Substrings of a Given String (LeetCode 828)
롤링 해시 (Rolling Hash) 문제
Easy
- Find All Anagrams in a String (LeetCode 438)
설명: 문자열에서 모든 애너그램의 시작 인덱스를 찾습니다.
핵심 개념: 롤링 해시, 슬라이딩 윈도우. - Find the Difference (LeetCode 389)
설명: 두 문자열의 차이점을 찾습니다.
핵심 개념: 롤링 해시. - Is Subsequence (LeetCode 392)
설명: 문자열이 다른 문자열의 부분 순서인지 확인합니다.
핵심 개념: 롤링 해시, 해싱. - Check If a String Contains All Binary Codes of Size K (LeetCode 1461)
Medium
- Longest Duplicate Substring (LeetCode 1044)
설명: 문자열에서 가장 긴 중복된 부분 문자열을 찾습니다.
핵심 개념: 롤링 해시, 이진 탐색. - Check If a String Contains All Binary Codes of Size K (LeetCode 1461)
설명: 문자열에 특정 길이 K의 모든 이진 문자열이 포함되어 있는지 확인합니다.
핵심 개념: 롤링 해시. - Count Unique Characters of All Substrings of a Given String (LeetCode 828)
설명: 주어진 문자열의 모든 부분 문자열에서 고유 문자의 개수를 계산합니다.
핵심 개념: 롤링 해시. - Minimum Window Substring (LeetCode 76)
- Find All Anagrams in a String (LeetCode 438)
- Longest Duplicate Substring (LeetCode 1044)
접미사 배열 (Suffix Arrays) 문제
Easy
- Longest Common Prefix (LeetCode 14)
설명: 문자열 배열에서 가장 긴 공통 접두사를 찾습니다.
핵심 개념: 접미사 배열, 문자열 탐색. - Shortest Unsorted Continuous Subarray (LeetCode 581)
설명: 배열을 정렬하여 비정렬 부분 배열의 최소 길이를 찾습니다.
핵심 개념: 문자열 정렬, 접미사 배열.
Medium
- Longest Duplicate Substring (LeetCode 1044)
설명: 가장 긴 중복된 부분 문자열을 찾습니다.
핵심 개념: 접미사 배열, 롤링 해시, 이진 탐색. - Count of Smaller Numbers After Self (LeetCode 315)
설명: 배열에서 각 숫자 뒤에 있는 더 작은 숫자의 개수를 계산합니다.
핵심 개념: 접미사 배열, 세그먼트 트리. - Distinct Subsequences II (LeetCode 940)
설명: 주어진 문자열의 고유한 모든 부분 문자열의 수를 찾습니다.
핵심 개념: 접미사 배열, 동적 프로그래밍.
오토마타를 이용한 문자열 매칭 문제
Medium
- Word Search (LeetCode 79)
설명: 2D 그리드에서 특정 단어를 찾습니다.
핵심 개념: DFA(Deterministic Finite Automaton), 백트래킹. - Wildcard Matching (LeetCode 44)
설명: 문자열이 와일드카드 패턴과 일치하는지 확인합니다.
핵심 개념: 오토마타, 동적 프로그래밍. - Regular Expression Matching (LeetCode 10)
설명: 문자열이 정규식 패턴과 일치하는지 확인합니다.
핵심 개념: NFA(Nondeterministic Finite Automaton), DP.
투 포인터 문제
Easy
- Two Sum II - Input Array Is Sorted (LeetCode 167)
설명: 정렬된 배열에서 두 숫자의 합이 목표 값이 되는 인덱스를 찾습니다.
핵심 개념: 투 포인터. - Reverse String (LeetCode 344)
설명: 문자열을 뒤집습니다.
핵심 개념: 투 포인터. - Valid Palindrome (LeetCode 125)
설명: 문자열이 회문인지 확인합니다.
핵심 개념: 투 포인터. - Remove Duplicates from Sorted Array (LeetCode 26)
설명: 정렬된 배열에서 중복을 제거하여 고유 값으로 구성된 배열을 반환합니다.
핵심 개념: 투 포인터.
Medium
- 3Sum (LeetCode 15)
설명: 배열에서 세 숫자의 합이 0이 되는 모든 조합을 찾습니다.
핵심 개념: 투 포인터. - Container With Most Water (LeetCode 11)
설명: 최대 물을 담을 수 있는 두 벽을 찾습니다.
핵심 개념: 투 포인터. - Partition Labels (LeetCode 763)
설명: 문자열을 부분으로 나누어 각 부분이 독립적이도록 분리합니다.
핵심 개념: 투 포인터. - Sort Colors (LeetCode 75)
설명: 배열을 세 가지 색깔로 정렬합니다.
핵심 개념: 투 포인터, Dutch National Flag Algorithm.
순진한 문자열 매칭 (Explicit Backup 방식)
Easy
- Implement strStr() (LeetCode 28)
설명: 문자열에서 특정 패턴의 시작 인덱스를 찾습니다.
핵심 개념: Brute Force, 순진한 문자열 매칭.
Medium
- Repeated Substring Pattern (LeetCode 459)
설명: 문자열이 반복되는 패턴으로 이루어졌는지 확인합니다.
핵심 개념: 순진한 문자열 매칭, 패턴 탐색. - Substring with Concatenation of All Words (LeetCode 30)
설명: 모든 단어의 순열이 다른 문자열에 포함되는지 확인합니다.
핵심 개념: 순진한 문자열 매칭, 슬라이딩 윈도우.
Knuth-Morris-Pratt(KMP) 알고리즘 문제
Easy
- Implement strStr() (LeetCode 28)
설명: KMP 알고리즘을 사용하여 문자열에서 특정 패턴의 시작 인덱스를 찾습니다.
핵심 개념: KMP, 접두사 함수. - Repeated Substring Pattern (LeetCode 459)
설명: 문자열이 반복되는 패턴으로 이루어졌는지 확인합니다.
핵심 개념: KMP, 접두사 배열.
Medium
- Minimum Window Substring (LeetCode 76)
설명: 특정 패턴을 포함하는 가장 짧은 부분 문자열을 찾습니다.
핵심 개념: KMP, 접두사 배열, 해싱. - Longest Prefix Which Is Also Suffix (LeetCode 1392)
설명: 접두사와 접미사가 동일한 가장 긴 부분 문자열을 찾습니다.
핵심 개념: KMP, 접두사 배열. - KMP Algorithm Implementation (Custom Implementation Practice)
설명: KMP 알고리즘을 직접 구현하여 문자열 매칭 문제를 해결합니다.
핵심 개념: 접두사 배열, 문자열 매칭.
'Coding Test > 알고리즘 이론' 카테고리의 다른 글
Augmenting Data Structures - leetcode (30) (0) | 2025.01.11 |
---|---|
Knapsack 문제(배낭 문제) : DP 최적화 (0) | 2025.01.08 |
문자열 심화: Naive String Matching (4)과 Boyer-Moore 알고리즘 (7) (2) | 2025.01.07 |
문자열 심화: Trie 트라이 문제 (19) (0) | 2025.01.07 |
해밀턴 순회 및 경로 문제 (1) | 2025.01.06 |