울타리 잘라내기

  • User Avatar
    KIMHR

    울타리 잘라내기 문제를 풀었는데요 오답이 뜹니다.
    일단 예제의 테스트 케이스 3개는 무난히 통과했고
    전에 어떤분이 하셧던 질문중에
    테스트 케이스 1 9 1 8 8 8 8 8 8 케이스도
    48로 잘 나왔고 이 케이스 저 케이스 여러개를 해봐도
    예외 케이스를 못찾겠네요.

    소스코드
    ~~~ java
    public class Main {
    public static void main(String[] args){
    Scanner in = new Scanner(System.in);
    int caseNum = in.nextInt();
    for(int cNum = 0; cNum < caseNum; cNum++){
    int num = in.nextInt();
    int[] fence = new int[num];
    for(int i = 0; i < num; i++){
    fence[i] = in.nextInt();
    }
    System.out.println(cut(fence, 0, fence.length-1));
    }
    }

    static int cut(int[] fence, int left, int right){
        int mid = (left+right)/2;
        if(left == right){
            return fence[left];
        } else {
            int leftCut = cut(fence, left, mid);
            int rightCut = cut(fence, mid+1, right);
            int maxValue = max(leftCut, rightCut);
            maxValue = max(maxValue, maxCut(fence, mid));
            return maxValue;
        }
    }
    
    static int maxCut(int[] fence,int i){
        int left = i-1;
        int right = i+1;
        int count = 1;
        int max = Integer.MIN_VALUE;
        while(left >= 0 && fence[i] <= fence[left]){
            count++;
            left -= 1;
        }
        while(right < fence.length && fence[i] <= fence[right]){
            count++;
            right += 1;
        }
        if(max < (fence[i]*count))
            max = fence[i]*count;
        return max;
    }
    
    static int max(int a, int b){
        if(a > b)
            return a;
        else
            return b;
    }
    

    }
    ~~~


    11년 전
1개의 댓글이 있습니다.
  • User Avatar
    JongMan

    maxCut()이 틀린거 같네요.

    왜 틀렸나 좀더 생각해 보시고, 아닌거 같으시면 알고리즘 설명을 좀더 자세히 올려주세요.


    11년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.