🎁 문제 링크
https://www.acmicpc.net/problem/2018
2018번: 수들의 합 5
어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한
www.acmicpc.net
🎁 문제 설명
🎁 코드
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
//배열에 값 넣기
int[] arr = new int[n];
for (int i = 1; i <= n; i++) {
arr[i - 1] = i;
}
//투포인터를 이용한 연속된 수의 합 계산
int start = 0, end = 0, count = 0, sum = 0;
while (true) {
if (sum >= n) {
sum -= arr[start++];
} else if (end == n) {
break;
} else {
sum += arr[end++];
}
if (sum == n) {
count++;
}
}
System.out.println(count);
}
}
🎁 풀이
1) N의 최대값이 10_000_000 이기 때문에 시간복잡도 O(n)을 사용해야한다. -> 투포인터 사용
2) 정수 N의 값을 받아 배열을 만들어주고, 투포인터 식을 이용하여 count를 추출한다.
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
백준 1940번 : 주몽 [Java] (0) | 2023.09.01 |
---|---|
백준 2003번 : 수들의 합2 [Java] (1) | 2023.09.01 |
백준 15439번 : 베라의 패션 [Java] (0) | 2023.08.31 |
댓글