Group Anagrams — 정렬 키와 문자 개수 키로 애너그램 묶기
애너그램 문자열을 같은 그룹으로 묶는 LeetCode 49번, 정렬된 문자열을 키로 쓰는 풀이부터 문자 개수 배열을 해시 키로 바꾸는 `O(n * k)` 풀이까지 정리합니다.
36개의 글
애너그램 문자열을 같은 그룹으로 묶는 LeetCode 49번, 정렬된 문자열을 키로 쓰는 풀이부터 문자 개수 배열을 해시 키로 바꾸는 `O(n * k)` 풀이까지 정리합니다.
문단에서 금지어를 제외하고 가장 많이 등장한 단어를 찾는 LeetCode 819번, 문장 부호 제거와 소문자 정규화, 해시 카운팅 풀이를 정리합니다.
문자 로그와 숫자 로그를 재정렬하는 LeetCode 937번, 로그를 identifier와 content로 나누고 문자 로그만 content, identifier 순으로 정렬하는 풀이를 정리합니다.
문자열이 유효한 팰린드롬인지 판정하는 LeetCode 125번, 정제 후 뒤집기 풀이부터 원본 문자열을 직접 훑는 투 포인터 `O(n)`/`O(1)` 풀이까지 정리합니다.
1부터 n까지의 숫자 중 배열에 나타나지 않은 값을 찾는 LeetCode 448번, 완전 탐색부터 존재 배열, 음수 제자리 마킹 풀이까지 정리합니다.
정수 배열에서 세 번째로 큰 서로 다른 값을 찾는 LeetCode 414번, 정렬 풀이부터 세 변수로 상위 3개를 한 번에 추적하는 `O(n)` 풀이까지 정리합니다.
학생 키 배열을 정렬했을 때의 기대 순서와 현재 순서를 비교해 다른 인덱스 개수를 세는 LeetCode 1051번, 정렬 비교 풀이부터 카운팅 정렬 풀이까지 정리합니다.
배열에서 짝수를 앞쪽으로, 홀수를 뒤쪽으로 배치하는 LeetCode 905번, 보조 배열 풀이부터 제자리 투 포인터 partition 풀이까지 정리합니다.
각 원소를 자기 오른쪽에 있는 값 중 최댓값으로 바꾸고 마지막 원소는 `-1`로 만드는 LeetCode 1299번, 완전 탐색부터 오른쪽에서 왼쪽으로 갱신하는 `O(n)`/`O(1)` 풀이까지 정리합니다.
배열이 엄격하게 증가한 뒤 엄격하게 감소하는 산 모양인지 확인하는 LeetCode 941번, 꼭대기 기준 검증부터 한 번 순회 풀이까지 정리합니다.
배열 안에 어떤 값 `n`과 `2 * n`이 서로 다른 위치에 존재하는지 확인하는 LeetCode 1346번, 완전 탐색부터 `HashSet`을 이용한 한 번 순회 풀이까지 정리합니다.
정렬된 배열에서 중복을 제자리 제거하고 고유 원소 개수 `k`를 반환하는 LeetCode 26번, 보조 배열 풀이부터 쓰기 포인터로 앞쪽 고유 값 구간을 만드는 `O(n)`/`O(1)` 풀이까지 정리합니다.
배열에서 특정 값을 제자리 제거하고 남은 길이를 반환하는 LeetCode 27번, 별도 배열 방식부터 앞쪽 유효 구간을 유지하는 `O(n)`/`O(1)` 풀이, 뒤쪽 스왑 변형까지 정리합니다.
정렬된 두 배열을 `nums1` 안에서 병합하는 LeetCode 88번, 별도 배열 풀이부터 뒤에서부터 채우는 제자리 `O(m + n)` 풀이까지 정리합니다.
고정 길이 배열에서 `0`을 복제하며 나머지를 오른쪽으로 미는 LeetCode 1089번, 별도 배열 `O(n)` 풀이부터 오른쪽에서부터 덮어쓰는 제자리 `O(n)`/`O(1)` 풀이까지 정리합니다.
정렬된 배열의 각 원소를 제곱한 뒤 다시 정렬된 배열로 만드는 LeetCode 977번, 제곱 후 정렬 `O(n log n)` 풀이부터 양끝 절댓값을 비교하는 투 포인터 `O(n)` 풀이까지 정리합니다.
배열에서 자릿수가 짝수인 수가 몇 개인지 구하는 LeetCode 1295번, 문자열 길이 풀이부터 나눗셈으로 자릿수 세기, 범위 비교 `O(n)` 풀이까지 정리합니다.
이진 배열에서 가장 긴 연속된 1의 길이를 구하는 LeetCode 485번, 구간을 매번 다시 세는 `O(n²)` 풀이부터 현재 길이와 최댓값만 유지하는 `O(n)` 풀이까지 정리합니다.
`magazine`의 문자들로 `ransomNote`를 만들 수 있는지 판정하는 LeetCode 383번, 느린 문자 제거 방식부터 해시맵 카운팅, 길이 26 배열 `O(n)` 풀이까지 정리합니다.
단일 연결 리스트의 중간 노드를 반환하는 LeetCode 876번, 배열에 노드를 모으는 풀이부터 길이를 세는 두 번 순회, slow/fast 포인터 `O(n)`/`O(1)` 풀이까지 정리합니다.
고객별 계좌 잔액 행렬에서 가장 큰 자산 합을 구하는 LeetCode 1672번, 행별 합 배열을 만드는 풀이부터 최댓값만 유지하는 `O(mn)`/`O(1)` 풀이까지 정리합니다.
배열의 각 위치까지의 합을 구하는 LeetCode 1480번, 매번 다시 더하는 `O(n²)` 풀이부터 누적 변수 `O(n)`, 입력 배열을 직접 바꾸는 `O(1)` 공간 풀이까지 정리합니다.
로마 숫자 문자열을 정수로 바꾸는 LeetCode 13번, 감산 조합을 직접 처리하는 풀이부터 왼쪽→오른쪽 lookahead, 오른쪽→왼쪽 스캔 `O(n)` 풀이까지 정리합니다.
정수가 앞에서 읽어도 뒤에서 읽어도 같은지 판정하는 LeetCode 9번, 문자열 변환 풀이부터 전체 숫자 뒤집기, 오버플로우 걱정을 줄이는 절반 뒤집기 `O(log x)` 풀이까지 정리합니다.
합이 `k`가 되는 두 수를 한 번씩만 써서 최대 몇 쌍을 만들 수 있는지 구하는 LeetCode 1679번, `O(n²)` 브루트포스부터 정렬 + 투 포인터 `O(n log n)`, 해시 카운팅 `O(n)`까지 정리합니다.
두 수직선이 만들 수 있는 최대 물의 양을 구하는 LeetCode 11번, `O(n²)` 브루트포스부터 왜 더 낮은 쪽 포인터만 움직이면 되는지까지 투 포인터 `O(n)` 풀이를 정리합니다.
문자열 `s`가 `t`의 부분 수열인지 판정하는 LeetCode 392번, `indexOf` 기반 순차 탐색부터 투 포인터 `O(|s| + |t|)`, 그리고 다중 질의를 위한 전처리 + 이진 탐색까지 정리합니다.
배열의 `0`을 뒤로 밀면서 나머지 순서를 유지하는 LeetCode 283번, 별도 배열 방식과 쓰기 포인터 스왑 방식을 비교하며 정리합니다.
연속된 같은 문자를 '문자 + 개수'로 압축하는 LeetCode 443번, 별도 버퍼 방식과 읽기/쓰기 포인터로 제자리 압축하는 방식을 비교하며 정리합니다.
자기 자신을 제외한 나머지 원소의 곱을 나눗셈 없이 구하는 LeetCode 238번, 브루트포스 `O(n²)`부터 접두사·접미사 곱 배열, 그리고 변수 하나로 `O(n)`/`O(1)`까지 정리합니다.
문자열에서 모음만 골라 순서를 뒤집는 LeetCode 345번, 별도 리스트 방식과 투 포인터 스왑 방식을 비교하며 정리합니다.
인접한 화단에 꽃을 동시에 심을 수 없을 때 `n`송이 배치가 가능한지 판단하는 LeetCode 605번, 그리디 선택이 왜 최적인지와 배열 수정 없이 `O(n)`/`O(1)`로 푸는 방법을 정리합니다.
Big-O 표기법이 무엇인지, 대표적인 시간 복잡도가 각각 어떤 코드 패턴에서 나타나는지, 공간 복잡도는 어떻게 세는지 단계별로 정리합니다.
두 문자열의 최대 공약 문자열을 구하는 LeetCode 1071번, 브루트포스부터 GCD 기반 O(n + m) 풀이까지 정리합니다.
두 문자열을 교대로 합치는 LeetCode 1768번, 공통 구간 분리 방식과 단일 루프 방식을 비교하며 정리합니다.
삼중 반복 `O(n^3)`부터, `leftMin`/`rightMax` 두 배열을 쓰는 `O(n)`/`O(n)`, 그리고 변수 두 개로 `O(n)`/`O(1)`에 푸는 그리디까지, `first`/`second` 불변식을 기준으로 정리합니다.