• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    해결됨

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

21.08.10 12:16 작성 조회수 177

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

윤다정님의 프로필

윤다정

2022.02.11

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

0

기만이님의 프로필

기만이

질문자

2021.08.19

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

0

기만이님의 프로필

기만이

질문자

2021.08.12

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

0

안녕하세요^^

중간에 출력하는

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

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