강의

멘토링

커뮤니티

Inflearn コミュニティ Q&A

hak のプロフィール画像
hak

投稿した質問数

Javaアルゴリズムの問​​題解説:コーディングテストに備えて

4. 連続部分数列(複合的な問題)

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

解決済みの質問

作成

·

376

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));
   }

java코테 준비 같이 해요!

回答 4

0

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

0

hak님의 프로필 이미지
hak
質問者

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

0

hak님의 프로필 이미지
hak
質問者

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

0

codingcamp님의 프로필 이미지
codingcamp
インストラクター

안녕하세요^^

중간에 출력하는

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

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

hak のプロフィール画像
hak

投稿した質問数

質問する