• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

어느 부분에서 오답인지 잘 모르겠어요

24.03.05 23:33 작성 조회수 128

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

영상보기 전 혼자 풀었었던 답인데 어떤 부분에서 오답인지 모르겠습니다. 도와주세요 ㅜ

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int N = scan.nextInt();
        int M = scan.nextInt();
        int[] nums = new int[N];

        int index1 = 0;
        int index2 = 1;
        int answer = 0;

        for (int i = 0; i < N; i++){
            nums[i] = scan.nextInt();
        }

        int sum = nums[index1] + nums[index2];
        while(index2<N-1){ // index2가 2일 때
            if(sum==M){ //
                answer++; // anser은 +1이 됨. 이 때 index2는 2
                sum -= nums[index1++];
                sum += nums[++index2]; // 인덱스 위치 옮겨줌. index2는 3이 됨.
                if(sum == M && index2 == N-1){
                    answer++;
                }
                continue;
            }
            if(sum<M){
                sum += nums[++index2];
                continue;
            }
            if(sum>M){
                sum -= nums[index1++];
                continue;
            }
        }
        System.out.println(answer);
    }
}

 

답변 2

·

답변을 작성해보세요.

1

안녕하세요^^

5 3

1 1 1 1 3

위 입력이 답이 3인데 2가 출력됩니다. 디버그해보세요. 그리고 저는 요즘에 이 문제를 영상의 방법보다 좀더 간결하게 아래와 같이 하고 있습니다. 참고하세요.

import java.util.*;
class Main {	
	public int solution(int n, int m, int[] arr){
		int answer=0, sum=0, lt=0;
		for(int rt=0; rt<n; rt++){
			sum+=arr[rt];
			while(sum>m){
				sum-=arr[lt++];
			}
			if(sum==m) answer++; 
		}
		return answer;
	}

	public static void main(String[] args){
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		int n=kb.nextInt();
		int m=kb.nextInt();
		int[] arr=new int[n];
		for(int i=0; i<n; i++){
			arr[i]=kb.nextInt();
		}
		System.out.print(T.solution(n, m, arr));
	}
} 

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.07

안녕하세요, 인프런 AI 인턴입니다.

ghsmsl님, 코드를 보고 오답 부분을 찾으려면 문제의 정확한 요구사항과 여러 가지 테스트 케이스를 고려해야 해요. 제출하신 코드를 보면, index2<n-1 조건 때문에 n-1번째 원소까지만 검사하는 문제가 있어 보입니다. 남은 배열의 요소를 충분히 확인하지 않으면 제대로 된 결과를 얻을 수 p> <p>또한 sum == M 일 때 index1과 index2를 옮기는 로직에서 index2가 배열의 끝에 도달했을 때를 충분히 고려하지 않은 것 같아요. 이 부분도 확인이 필요합니다. 특히 배열의 마지막 요소를 처리할 때 off-by-one 오류가 발생하지 않도록 주의해야 합니다.</p> <p>마지막으로, while문 내에서 sum이 M보다 클 경우 sum에서 nums[index1]을 빼고 index1을 증가 시키는데, 이 로직이 정확하게 동작하는지 다시 한 번 검증해볼 필요가 있습니다.</p> <p>아래와 같은 테스트 케이스를 만들어서 코드가 정상적으로 동작하는지 확인해 보세요.<br /> - N과 M이 같고 모든 숫자가 동일할 때 (예: N=5, M=15, nums=[3, 3, 3, 3, 3])<br /> - N과 M이 같고 하나의 숫자만 M과 같을 때 (예: N=5, M=3, nums=[1, 2, 3, 4, 5])<br /> - N과 M이 다르고 연속된 수들의 합이 M이 되는 경우가 여러개 있는 경우 (예: N=8, M=6, nums=[1, 2, 1, 3, 1, 1, 1, 2])</p> <p>이후에도 오류가 발견되면 질문이나 코드와 함께 추가로 질문해주세요.</p></n-1>