728x90
✍️풀이방식
투 포인터를 활용해서 풀기 O(n)의 시간복잡도 알고리즘 사용할 것
* 입력되는 연산 수가 많으면 꼭 시간복잡도를 생각해서 관련 알고리즘을 적용시켜야합니다.
투 포인터 알고리즘이란?
1차원 배열에서 각자 다른 원소를 가리키고 있는 2개의 포인터를 조작해가면서 원하는 값을 찾을 때 까지 탐색하는 알고리즘
1. 시작점과 끝점이 첫번째 원소의 인덱스를 가리키도록 한다. (strat, end)
2. 현재 부분 합이 M과 같다면 count
3. 현재 부분 합이 M보다 작다면 end를 1 증가
4. 현재 부분 합이 M보다 크거나 같다면 start를 1 증가
5. 모든 경우를 확인할 때까지 2-4번 과정을 반복
투 포인터 관련 개념 참고하였습니다.
https://butter-shower.tistory.com/226
[Algorithm] 투포인터(Two Pointer) 알고리즘
알고리즘 문제를 풀다보면 종종 나오는 투포인터 알고리즘! 막 꼬여가지고 ㅋㅋㅋ 저도 중간에 제대로 못짜고 그러는 경우가 많은데요, 많은 코딩테스트 문제에 등장하는 것은 아니지만 잊을만
butter-shower.tistory.com
🖥️문제풀이
이번 문제는 데이터 입력양이 적기 때문에 scanner로 구현
import java.util.*;
import java.io.*;
public class Main
{
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int N =sc.nextInt();
int start_index=1;
int end_index=1;
int count=1;
int sum=1;
while(end_index!=N){
if(sum==N){
count++;// 일치하면 카운트 증가
end_index++;
sum += end_index;
}else if(sum>N){
sum -=start_index;
start_index++;
}else{//sum이 n보다 작을 때
end_index++;
sum += end_index;
}
}
System.out.println(count);
}
}
☑️실행결과
728x90
'✍️ Algortihm > Java' 카테고리의 다른 글
[백준] 9086 문자열 - JAVA (1) | 2024.11.20 |
---|---|
[백준] 1940번: 주몽의 명령 - JAVA (1) | 2024.11.13 |
[백준] 11659번: 구간 합 구하기 4 - JAVA (0) | 2024.11.10 |
자바 코딩 테스트 정리 (1) (0) | 2024.08.28 |
[백준] 1546번: 평균 - JAVA (0) | 2024.08.14 |