프로그래머스 - [Level 2] 숫자의 표현(JAVASCRIPT)
카테고리 : 투 포인터
투 포인터를 활용해 부분합을 구하는 문제이다. 로직은 간단하다.
left는 부분 합의 첫 원소, right는 부분 합의 마지막 원소이고,
아래 조건식을 돌며 일치하는 경우의 수를 카운팅해준다.
1) 현재의 부분 합이 n 보다 작거나 같다면
sum+=right
right++
2) 현재 부분 합이 n 보다 크다면
sum-=left
left++
예제를 시뮬레이션 해보자.
n = 15
sum 배열 [1] left = 1 right = 2
sum 배열 [1,2] left = 1 right = 3
sum 배열 [1,2,3] left = 1 right = 4
sum 배열 [1,2,3,4] left = 1 right = 5
sum 배열 [1,2,3,4,5] left = 1 right = 6 true!
sum 배열 [2,3,4,5] left = 2 right =6
sum 배열 [3,4,5] left = 3 right = 6
sum 배열 [4,5] left = 4 right = 6
sum 배열 [4,5,6] left = 4 right = 7 true!
sum 배열 [5,6] left = 5 right = 7
sum 배열 [6] left = 6 right = 7
sum 배열 [6,7] left = 6 right = 8
sum 배열 [7] left = 7 right = 8
sum 배열 [7,8] left = 7 right = 8 true!
.
.
.
sum 배열 [15] left = 8 right = 15 true!
소스 코드
function solution(n) {
if(n===1 || n===2) return n;
let answer = 0;
let left=1,right=2;
let sum=left;
while(right<=n){
if(sum+right<=n){
sum+=right;
right++;
if(sum===n) answer++;
}else{
sum-=left;
left++;
}
}
return answer;
}
Leave a comment