leetcode was fun, so I did one more
- 주어진 문자열에서 반복되지 않는 가장 긴 부분 문자열의 길이를 찾는 LeetCode 문제 ("Longest Substring Without Repeating Characters")를 다룹니다. 🧩
- 문자열 길이가 10^4까지이므로, O(N^2) 알고리즘은 통과할 수 있지만, 더 효율적인 O(N) 솔루션이 필요할 수 있음을 인지합니다. 📏
- 두 개의 포인터(I, J)와
Set 자료구조를 활용한 O(N^2) 슬라이딩 윈도우 기법을 사용하여 모든 가능한 부분 문자열을 탐색하며 중복 문자를 확인합니다. 🔍
- 초기 코드에서 문자열 인덱싱 오류(
s[I + J] 대신 s[J])를 발견하고 수정하여 테스트 케이스를 통과시킵니다. 이는 종이 위에서 알고리즘을 시뮬레이션하는 것의 중요성을 보여줍니다. 🐛
Set 객체를 내부 루프 밖으로 이동시키고 clear() 메서드를 사용하여 매번 새로운 Set을 생성하는 오버헤드를 줄여 성능을 약간 개선합니다. ⚡
- 구현된 O(N^2) 슬라이딩 윈도우 솔루션은 LeetCode에서 낮은 성능(낮은 백분위)을 보였으며, 더 효율적인 O(N) 솔루션의 필요성을 확인합니다. 🐢
- 다른 사람들의 O(N) 솔루션을 통해, 중복 문자를 발견했을 때 윈도우의 시작점(I)을 해당 중복 문자의 첫 번째 발생 위치 다음으로 이동시키는 고급 슬라이딩 윈도우 기법이 있음을 알게 됩니다. 🚀
- 알고리즘을 종이 위에서 단계별로 검토하고 디버깅하는 것이 중요하며, 항상 더 빠른 해결책을 고민하고 다른 사람의 효율적인 코드를 참고하여 배우는 자세가 필요합니다. 💡
데브허브 | DEVHUB | leetcode was fun, so I did one more