[프로그래머스, 12924] 숫자의 표현 (java)
Problem Solving/Programmers

[프로그래머스, 12924] 숫자의 표현 (java)

728x90

https://school.programmers.co.kr/learn/courses/30/lessons/12924

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

728x90

메모리: 52 MB, 시간: 0.54 ms

사용 알고리즘: 투 포인터

 

투 포인터 lr을 두고, l부터 r까지 수의 합을 sum에 저장해둔다.

sumn보다 작다면 r++을 통해 sum값을 키워준다.

sumn보다 크다면 l++을 통해 sum값을 줄여준다.

sum == n을 찾았다면 anwer++ 해준다.

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        // 투포인터
        int l = 1, r = 1; 
        int sum = 1; // l과 r 사이의 합
        while(r <= n) {
            if(sum == n) { // n을 만들 수 있는 조합 발견
                answer++;
                
                // l 포인터 이동
                sum -= l;
                l++;
            }
            else if(sum < n) { // 합이 작으면 r 포인터를 이동하여 합을 키워줌
                r++;
                sum += r;
            }
            else { // 합이 크면 l 포인터를 이동하여 합을 낮춤
                sum -= l;
                l++;
            }
        }
        
        return answer;
    }
}

 

728x90