프로그래머스 숫자의 표현 JAVA 풀이 (투 포인터, 슬라이딩 윈도우)

2026. 6. 23. 17:06·코테(Solved.ac + Programmers)
728x90

🔗 문제 링크

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


📌 문제 개요

자연수 n이 주어질 때, 연속된 자연수들의 합으로 n을 표현할 수 있는 경우의 수를 구하는 문제이다.

예를 들어 15는 다음과 같이 표현할 수 있다.

1 + 2 + 3 + 4 + 5 = 15
4 + 5 + 6 = 15
7 + 8 = 15
15 = 15

따라서 정답은 4이다.


📌 접근 방법

연속된 자연수의 구간을 표현하기 위해 투 포인터를 사용한다.

start와 end를 이용하여 현재 구간을 나타내고, 현재 구간의 합을 sum으로 관리한다.

  • sum < n 이면 구간이 부족하므로 오른쪽을 확장한다.
  • sum > n 이면 구간이 크므로 왼쪽을 줄인다.
  • sum == n 이면 정답을 증가시키고 다음 경우를 탐색한다.

이 과정을 반복하면 모든 연속 구간을 효율적으로 확인할 수 있다.


📌 핵심 아이디어

1. 현재 구간의 합 관리

현재 구간의 합을 저장하여 매번 다시 계산하지 않는다.

int start = 1;
int end = 1;
int sum = 1;

2. 합이 부족하면 구간 확장

현재 합이 n보다 작다면 더 큰 수를 포함시켜 합을 증가시킨다.

end++;
sum += end;

예시

1 + 2 + 3 = 6
↓
1 + 2 + 3 + 4 = 10

3. 합이 크면 구간 축소

현재 합이 n보다 크다면 가장 왼쪽 숫자를 제거한다.

sum -= start;
start++;

 

예시

1 + 2 + 3 + 4 + 5 + 6 = 21
↓
2 + 3 + 4 + 5 + 6 = 20

4. 합이 같으면 정답 증가

현재 구간이 정답이므로 개수를 증가시키고 다음 경우를 탐색한다.

answer++;

sum -= start;
start++;

예시

1 + 2 + 3 + 4 + 5 = 15

정답 카운트 후 다음 구간 탐색 진행


📌 전체 코드

class Solution {
    public int solution(int n) {
        int answer = 0;

        int start = 1;
        int end = 1;
        int sum = 1;

        while (start <= n) {

            if (sum == n) {
                answer++;
                sum -= start;
                start++;
            } else if (sum < n) {
                end++;
                sum += end;
            } else {
                sum -= start;
                start++;
            }
        }

        return answer;
    }
}
 

📄 정리

  • 연속된 자연수의 합 문제는 투 포인터로 해결할 수 있다.
  • start, end를 이용하여 현재 구간을 관리한다.
  • sum < n이면 확장, sum > n이면 축소한다.
  • sum == n이면 정답을 증가시킨다.
  • 누적 합을 활용하면 불필요한 합 계산을 줄일 수 있다.
728x90

'코테(Solved.ac + Programmers)' 카테고리의 다른 글

프로그래머스 신호등 정전 JAVA 풀이 (시뮬레이션, 최소공배수)  (0) 2026.06.25
프로그래머스 창고 정리 JAVA 풀이  (0) 2026.06.24
프로그래머스 다음 큰 숫자 JAVA 풀이 (비트 연산, Integer.bitCount)  (0) 2026.06.23
프로그래머스 피보나치 수 JAVA 풀이 (DP, 공간 최적화)  (0) 2026.06.22
프로그래머스 올바른 괄호 JAVA 풀이 (스택)  (0) 2026.06.22
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
  • 프로그래머스 신호등 정전 JAVA 풀이 (시뮬레이션, 최소공배수)
  • 프로그래머스 창고 정리 JAVA 풀이
  • 프로그래머스 다음 큰 숫자 JAVA 풀이 (비트 연산, Integer.bitCount)
  • 프로그래머스 피보나치 수 JAVA 풀이 (DP, 공간 최적화)
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN N
      • 코테(Solved.ac + Programmers) N
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    배열
    java
    완전탐색
    실기
    level0
    코딩테스트
    정렬
    브루트포스
    수학
    백엔드개발자
    Level2
    level1
    알고리즘
    정처기실기
    시뮬레이션
    정보처리기사 실기 기출문제
    자료구조
    정처기
    기출문제
    dp
    solved.ac
    자바
    피보나치
    프로그래머스
    정처기오답노트
    문자열
    구현
    백준
    springboot
    정보처리기사
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
프로그래머스 숫자의 표현 JAVA 풀이 (투 포인터, 슬라이딩 윈도우)
상단으로

티스토리툴바