백준 - 수들의 합 5 2018번 [2일차]
시간제한 | 메모리 제한 |
2초 | 32MB |
문제
어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한다. 이때, 사용하는 자연수는 N이하여야 한다.
예를 들어, 15를 나타내는 방법은 15, 7+8, 4+5+6, 1+2+3+4+5의 4가지가 있다. 반면에 10을 나타내는 방법은 10, 1+2+3+4의 2가지가 있다.
N을 입력받아 가지수를 출력하는 프로그램을 작성하시오.
입력
첫 줄에 정수 N이 주어진다.
출력
입력된 자연수 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 출력하시오
나의코드
package day2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution6 {
public static void main(String[] args) throws IOException {
// 수들의 합5 - 2018번
// 배열을 순서대로 탐색해야함
// 투포인터
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
int [] arr = new int[num];
//배열 저장
for(int i =0 ; i < num; i++){
arr[i] = i+1;
}
// 탐색
int sum = 0, start = 0, end = 0, count = 0;
while (true){
if(sum >= num){ //합이 num 보다 크거나 같다면
sum -= arr[start++]; // 값을 빼주고 start++
}else if(end == num){ //end가 맨 끝에 도착했을 경우
break; //반복문 끝냄
}else { //합이 num 보다 작다면
sum += arr[end++];
}
if(sum == num){ //start가 num 과 일치 한다면
count++; // count증가
}
}
System.out.println(count);
}
}
이문제도 투포인터로 해결할수 있는 문제다
https://jjuya.tistory.com/109
'Algorithm > 코딩테스트' 카테고리의 다른 글
[코딩테스트] 백준 - 알고리즘 수업 - 피보나치 수 2 (0) | 2024.07.19 |
---|---|
[코딩테스트] 백준 - 알고리즘 수업 - 피보나치 수 1 (0) | 2024.07.19 |
[코딩테스트] 백준 - 수들의 합 2 (0) | 2024.07.18 |
[코딩테스트] 백준 - 뜨거운 붕어빵 (0) | 2024.07.18 |
[코딩테스트] 백준 - 별 찍기 - 8 (0) | 2024.07.18 |