일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 프로그래머스 K_Digital Training
- 리팩토링 회고
- 인프런 자바스크립트 알고리즘 문제풀이
- 모던 자바스크립트 Deep Dive TIL
- 프로그래머스 데브코스
- K_Digital Training
- frontend roadmap study
- 우테캠 회고록
- 머쓱이
- react 프로젝트 리팩토링
- TypeScript 문법 소개
- react customHook 예시
- 모던 자바스크립트 Deep Dive
- 모던 javascript Deep Dive
- Vue3
- 프로그래머스 데브코스 프론트엔드 TIL
- 프로그래머스 데브코스 프론트엔드
- 투포인터알고리즘 js
- KDT 프로그래머스 데브코스 프론트엔드
- 프로그래머스 K_Digital Training 프론트엔드
- Vue3 Router
- Frontend Roadmap
- 백준 js
- useRef 지역 변수
- 모던 자바스크립트 TIL
- 모던 자바스크립트 딥다이브
- 백준 node.js
- useEffect return
- KDT 프로그래머스
- 개발자 특강
- Today
- Total
프론트엔드 개발자의 기록 공간
연속 부분수열 2 본문
🚩 연속 부분 수열 2 -> 투포인터 알고리즘
📖 문제 설명 : 여러 개의 수로 이루어진 수열이 주어집니다.
이 수열에서 연속부분수열의 합이 특정숫자 M이하가 되는 경우가 몇 번 있는지 구하는 프로그
램을 작성하세요.
만약 M=5이고 수열이 다음과 같다면 [1, 3, 1, 2, 3]
합이 5이하가 되는 연속부분수열은 {1}, {3}, {1}, {2}, {3}, {1, 3}, {3, 1}, {1, 2}, {2, 3},
{1, 3, 1}로 총 10가지입니다.
input : M = 5 , arr = [1, 3, 1, 2, 3] => output : 10
input : M = 6 , arr = [1, 1, 1, 1, 1] => output : 15
💡Tip. 투포인터 알고리즘으로 이중 for 문으로 전체 탐색을 하면 O(n^2)이 되기 때문에
투포인터 알고리즘을 이용하여 O(n)으로 해결해야 한다.
👉 소스 코드 ⏰시간복잡도 O(n)
function solution(arr, m) {
let result = 0,
sum = 0,
rt = 0
for (let lt = 0; lt < arr.length; lt++) {
rt = lt
sum = arr[rt++]
while (sum <= m && rt <= arr.length) {
result += 1
sum += arr[rt++]
}
}
return result
}
for 문안에 있는 while 문의 총 반복 횟수가 n을 넘지 않기 때문에 시간 복잡도는 O(n)이다.
👨💻 코드 설명
연속 부분 수열1 문제와 유사하다. 다만 여기서는 연속된 배열에서 특정 숫자 M 이하의 경우를 구해야 하므로 로직은 다음과 같이 구성할 수 있다.
1. 반복문을 통해 배열 처음부터 끝까지 순회한다.
2. 시작 시점을 sum으로 초기화 후 while을 통해 rt 변수를 오른쪽으로 옮겨가면서 M보다 작을 때까지
계속 더해나가고 개수(result)도 카운트해준다.
3. 만약 sum이 M보다 클 경우 연속된 배열에서 M 이하인 경우의 수가 끝났으므로 다음 반복문을 수행한다.
잘못된 설명, 코드, 예외 케이스가 있다면 댓글 남겨주시면 수정하겠습니다.
'알고리즘_JS > 인프런 JS알고리즘' 카테고리의 다른 글
[투포인트] 결혼식 (0) | 2022.03.26 |
---|---|
Least Recently Used(카카오 캐시 문제 변형) (0) | 2022.03.25 |
괄호 문자 제거(스택) (0) | 2022.03.25 |
모든 아나그램 찾기 (0) | 2022.03.25 |
연속 부분수열 1 (0) | 2022.03.15 |