문제
로직
투포인터를 이용해 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일 때
'Java' 카테고리의 다른 글
[백준] 12891번 DNA 비밀번호 - 슬라이딩 윈도우 / switch / 함수 (0) | 2023.08.12 |
---|---|
[백준] 1940번 주몽 - 투포인터 / 시간 제한 맞추기 / 배열 정렬 / BufferReader (0) | 2023.08.12 |
[백준] 11659번 구간 합 구하기4 - 구간 합 / 배열 / BufferedReader / StringToken (0) | 2023.08.09 |
[백준]1546번 평균 - 배열 / 정수에서 실수로 변환 / 반복문 (0) | 2023.08.09 |
[백준] 11720번 숫자의 합 - 배열 활용 / 형변환 / 아스키코드 / readLine() (0) | 2023.08.09 |