연속된 자연수의 합

Seungmin Lim·2022년 2월 8일
0

코딩문제연습

목록 보기
31/63

문제

나의풀이

import java.util.*;

class Main {
	public int solution(int n) {
			int answer = 0,sum =0, start = 1;
			for(int end = 1; end<=n/2+1; end++) {
				sum += end;
				if(sum == n) answer++;
				while(sum>=n) {
					sum -= start++; //3 4 5
					if(sum == n) answer++;
				}
			}
			return answer;
		}
		    
	public static void main(String[] args) {
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		int n = kb.nextInt(); 
		System.out.println(T.solution(n));
	}
	
}

풀이방법

풀이는 바로 이전문제와 동일하다.
for문의 길이를 n/2+1로 잡는 이유는,
n=15라면 최대 7+8 즉, (15/2) + (15/2+1)를 넘어가는 순간
무조건 15초과의 값이 나와버리기 때문이다.
만약 n이 10이어도 4+5를 넘어가는 순간 다음 연속된 수는 10이 절대 나올수 없다.

핵심키워드

while문에서 sum>=m 일때 start값을 sum<m이 되도록 계속 빼주는 과정을 이해하자!

0개의 댓글