프로그래머스 - [Level 2] 숫자의 표현(JAVASCRIPT)

1 minute read

프로그래머스 숫자의 표현

카테고리 : 투 포인터

  포인터를 활용해 부분합을 구하는 문제이다. 로직은 간단하다.

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