강의로 돌아가기
고태호

테스트케이스 33번이 자꾸 틀렸다고 나오네요

클래스로 잡아서 좌표 계산해줬는데
33번에서만 틀렸다고 나오네여...
k가 5부터라서 0을 잡을 필요없을것같은데, 해결방법이 있을까요???

작성중인 코드―Solution.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.util.*;

class Node {
    int x;
    int y;
    Node(int x,int y){
        this.x=x;
        this.y=y;
    }
}
class Solution {
    public static ArrayList<Node> list = new ArrayList<>();
    public int[] solution(int[] sequence, int k) {
        int[] answer = new int[2];

        int lt=0;
        int sum = sequence[lt];
        if(k==0){
            answer = new int[2];
            answer[0] = 0;
            answer[1] = 0;
        }
        for(int rt=1; rt<sequence.length; rt++){
            sum+=sequence[rt];
            if(sum==k){
                list.add(new Node(lt, rt));
                sum-=sequence[lt++];
            }
            while(sum>k){
                sum-=sequence[lt++];
                if(sum==k){
                    list.add(new Node(lt, rt));
                }
            }
        }
        int ans = Integer.MAX_VALUE;
        int x1=0,x2=0;
        for(int i=0; i<list.size(); i++){
            if(ans>(list.get(i).y - list.get(i).x)){
                ans = list.get(i).y - list.get(i).x;
                x1 = list.get(i).x;
                x2 = list.get(i).y;
            }
        }
        answer[0] = x1;
        answer[1] = x2;
        return answer;
    }
}
1 개의 답변
JoChaeWoo

반례
입력값 〉 [2, 2, 2, 2, 2], 2
기댓값 〉 [0, 0]

k가 0이 아니어도 [0, 0]이 답이 될 수 있습니다.

추가로 for문 안을 아래처럼 최적화 할 수 있을 것 같습니다.
sum == k일 때도 while 문을 빠져나오기 때문에 먼저 확인하고 while문 안에서 다시 확인하는 기존 코드와 똑같이 동작합니다.

            sum += sequence[rt];
            while(sum>k){
                sum-=sequence[lt++];
            }
            if(sum == k){
                list.add(new Node(lt, rt));
            }
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.