데브허브 | DEVHUB | Number of Substrings With Only 1s - Leetcode 1513 - PythonNumber of Substrings With Only 1s - Leetcode 1513 - Python
- 이진 문자열에서 '1'로만 구성된 부분 문자열의 개수를 찾는 문제. 🧩
- 무차별 대입 방식은 O(N^2)의 시간 복잡도를 가지므로 비효율적이다. 🐢
- 핵심 아이디어는 현재 '1'로 끝나는 부분 문자열의 개수를 효율적으로 계산하는 것이다. 💡
- 연속된 '1'의 개수가
k일 때, 현재 '1'은 k개의 새로운 부분 문자열을 추가한다. (예: "1"은 1개, "11"은 2개, "111"은 3개 추가) ➕
- 예를 들어, "111"의 경우: 첫 번째 '1'은 1개, 두 번째 '1'은 2개("1", "11"), 세 번째 '1'은 3개("1", "11", "111")를 추가하여 총 1+2+3=6개의 부분 문자열을 만든다. 🔢
- 첫 번째 구현 방식은
consecutive 변수를 사용하여 연속된 '1'의 개수를 추적하고, 각 '1'을 만날 때마다 consecutive 값을 결과에 더한다. 🚀
- '0'을 만나면
consecutive 변수를 0으로 초기화하여 새로운 연속 '1' 세그먼트를 시작한다. 🔄
- 결과 값이 매우 커질 수 있으므로, 최종 결과에
10^9 + 7로 나눈 나머지를 반환해야 한다. 🧮
- 두 번째 구현 방식은 투 포인터(i, j)를 사용하여 연속된 '1'의 세그먼트 길이를 계산하고, 각 길이에 해당하는 부분 문자열 개수를 더한다. ✌️
- 두 방식 모두 O(N) 시간 복잡도와 O(1) 공간 복잡도를 가지며 효율적이다. ✅