[BAEKJOON] - 2018번 : 수들의 합 5

Kim Hyen Su·2024년 1월 31일
0

⏲️ 알고리즘

목록 보기
54/95

2018번 문제 링크

이전에 풀었던 개념인 것 같은데 다시 풀어보니 어려웠습니다... 투 포인터 알고리즘으로 풀지 않으면, 시간 초과가 발생하는 문제...

투 포인터는 말 그대로 두 개의 pointer를 사용하여 구간 합의 시작과 끝을 나타냅니다.

다음과 같이 루프에서 구간 합이 N 보다 작을 때, 클 때, 같을 때의 조건을 구분하여 로직을 수행해줍니다. 그리고 끝 포인트가 N과 같을 때 루프를 탈출하도록 구현합니다.

😀 성공

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

public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int N = Integer.parseInt(br.readLine());
        
        int start_idx = 1, end_idx = 1, count = 1;
        
        long sum = 1;
        
        while(end_idx != N){
            if(sum < N){
                end_idx++;
                sum += end_idx;
            }
            
            else if(sum == N){
                end_idx++;
                sum += end_idx;
                count++;
            }
            
            else if(sum > N){
                sum -= start_idx;
                start_idx++;
            }
        }
        
        br.close();
        System.out.println(count);
    }
}
profile
백엔드 서버 엔지니어

0개의 댓글