[백준] 2018번 : 수들의 합 5 (JAVA)

2026. 3. 5. 23:36·코테(Solved.ac + Programmers)
728x90

🔗 문제 링크

https://www.acmicpc.net/problem/2018


📌 문제 개요

자연수 N이 주어졌을 때, 연속된 자연수의 합으로 N을 표현할 수 있는 경우의 수를 구하는 문제

예를 들어 N = 15일 경우

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

 

총 4가지 경우가 존재한다.


📌 접근 방법

연속된 자연수의 합 문제이므로 투 포인터(Two Pointer) 방식으로 해결

두 개의 포인터를 사용한다.

  • start : 연속 구간의 시작 값
  • end : 연속 구간의 끝 값
  • sum : 현재 구간의 합

초기 상태

start = 1  
end = 1  
sum = 1

 

이후 sum과 N을 비교하면서 포인터를 이동시켜 모든 연속 구간을 탐색


📌 핵심 아이디어

현재 구간 [start ~ end] 의 합을 유지하면서 탐색한다.

 

1️⃣ sum < N

합이 부족하므로 구간을 확장한다.

end++  
sum += end

2️⃣ sum > N

합이 크므로 구간을 축소한다.

sum -= start  
start++

3️⃣ sum == N

result++  
sum -= start  
start++

 

정답을 카운트한 뒤 다음 구간을 찾기 위해 start를 이동한다.
투 포인터는 start와 end가 한 방향으로만 이동하기 때문에 모든 연속 구간을 O(N) 시간에 탐색할 수 있다.


📌 전체 코드

package no_2018;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class No2018 {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        int start = 1;
        int end = 1;
        int sum = 1;
        int result = 0;

        while (start <= N) {

            if (sum == N) {
                result++;
                sum -= start;
                start++;
            }
            else if (sum < N) {
                end++;
                sum += end;
            }
            else {
                sum -= start;
                start++;
            }
        }

        System.out.println(result);
    }
}

정리

이 문제는 연속된 자연수의 합을 찾는 문제로, 투 포인터 알고리즘을 활용하면 효율적으로 해결할 수 있다.
투 포인터 방식은 다음 특징을 가진다.

  • 연속 구간 문제에 적합
  • 포인터가 한 방향으로만 이동
  • 시간 복잡도 O(N)
728x90

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

[백준] 1402번 : 아무래도이문제는A번난이도인것같다 (JAVA)  (0) 2026.03.07
[백준] 13241번 : 최소공배수 (JAVA)  (0) 2026.03.06
[백준] 2747번 : 피보나치 수 (JAVA)  (0) 2026.03.04
[백준] 2057번 : 팩토리얼 분해 (JAVA)  (0) 2026.03.03
[백준] 1418번 : K-세준수 (JAVA)  (0) 2026.03.02
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
  • [백준] 1402번 : 아무래도이문제는A번난이도인것같다 (JAVA)
  • [백준] 13241번 : 최소공배수 (JAVA)
  • [백준] 2747번 : 피보나치 수 (JAVA)
  • [백준] 2057번 : 팩토리얼 분해 (JAVA)
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN
      • 코테(Solved.ac + Programmers)
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

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

    • GIT
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
[백준] 2018번 : 수들의 합 5 (JAVA)
상단으로

티스토리툴바