강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

선생님 왜 오답인지 모르겠습니다...자연수의합

작성

·

173

0

이렇게 풀었는데 오답으로 나와서 어디가 문제인지 잘 모르겠습니다... 강의 처럼 배열을 꼭 사용해야 하나요?

답변 2

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

위에 코드로는 17을 입력했을 때 8 9 경우로 1이 출력되어야 하는데 0이 출력됩니다. 

n=15일때, 아래 코드처럼 sum==n 이 되는 순간의 lt와 rt를 출력해보면서 디버그해보세요.

import java.util.Scanner;

public class Main {

	public int solution(int n) {
		int answer = 0, sum=0, lt=0;
		for (int rt = 0; rt < n/2+1; rt++) {
			sum+=rt;
			if(sum==n){
				answer++;
				System.out.println(lt+" "+rt);
			}
			while(sum>=n) {
				sum-=lt++;
				if(sum==n){
					answer++;
					System.out.println(lt+" "+rt);
				}
			}
		}
		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));
		kb.close();
	}
}

감사합니다. 주말에 답변해주셔서 감사합니다!!

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

소스코드를 제가 디버그 해볼 수 있도록 {;} 버튼을 이용해서 텍스트로 올려주세요. 

import java.util.Scanner;

public class Main {

	public int solution(int n) {
		int answer = 0, sum=0, lt=0;
		for (int rt = 0; rt < n/2+1; rt++) {
			sum+=rt;
			if(sum==n)answer++;
			while(sum>=n) {
				sum-=lt++;
				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));
		kb.close();
	}
}

주말인데 답변해주셔서 감사합니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기