본문 바로가기

Java

[백준] 2018번 수들의 합5 - 투포인터 / 배열 / if문 / while문

문제

 

 

로직

투포인터를 이용해 start_index와 end_index로 구분한다.

합한 값을 num과 비교해가며 투포인터의 값을 변경한다.

sum과 num의 값이 같아졌을 때 count의 값에 +1을 해준다.

(count가 처음에 1로 초기화한 이유는 자기자신의 값이 sum = num이기 떄문이다.)

 

 

My Code
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int count = 1;
        int end_index = 1;
        int start_index = 1;
        int sum = 1;

        while (num != end_index){
            if(sum == num) {
                count++; end_index++; sum += end_index;
            }
            else if (sum > num) {
                sum -= start_index;
                start_index++;
            }
            else {
                end_index++;
                sum += end_index;
            }
        }
        System.out.println(count);
    }
}

 

 

문제의 핵심 & 알게된 점

토포인터를 이용해 효율적인 코드를 구상하는 것이 핵심이다.

투포인터에 대해 몰랐는데 이 문제를 통해 이해할 수 있었다.

 

투포인터: 2개의 포인터로 알고리즘의 시간복잡도를 최적화함.

 

ex) num = 15일 때