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

기만이님의 프로필 이미지

작성한 질문수

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

4. 연속부분수열(복합적 문제)

왜 오답인지 원인을 모르겠습니다(해결,자문자답)

해결된 질문

작성

·

271

0

오답시 틀린 테스트케이스를 확인할 수 있다는 설명을 봤는데 이 문제만 그런건지 확인할 수 없습니다ㅠ 코드 리뷰 부탁드려도 될까요?

public static int solution(int nint mint ar[]) {
        int answer = 0subsum = 0;
        int lt=0rt=0;
        while(rt<n){ //적어도 lt<=rt임
            if(subsum <m){
                subsum += ar[rt++];
                System.out.println(lt+"~"+(rt-1)+" subsum:"+subsum);
            }
            else if(subsum == m){
                answer++;
                subsum -= ar[lt++];
            }
            else{
                subsum -= ar[lt++];
            }
        }
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] ar = new int[n];
        for (int i = 0i < ni++) {
            ar[i] = sc.nextInt();
        }
        sc.close();
        System.out.println(solution(nmar));
   }

답변 4

0

저랑 완전 똑같은 코드 짜셨네요. 저도 왜 오답인지 물어보려고 커뮤니티 들어왔다가 덕분에 이해하고 갑니다.

0

기만이님의 프로필 이미지
기만이
질문자

해당 코드는 rt = n이 되는 턴에서 조건문 중 하나를 수행하고 바로 종료하므로 연속부분수열합(subsum)>m일 경우 lt가 다음 인덱스로 넘어가야하는데 이를 실행할 수 없습니다.

0

기만이님의 프로필 이미지
기만이
질문자

중간 출력을 지우고 제출해도  오답으로 뜹니다.

0

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

안녕하세요^^

중간에 출력하는

System.out.println(lt+"~"+(rt-1)+" subsum:"+subsum);

이부분을 지우시고 채점하세요. answer만 출력해야 합니다.