울타리 잘라내기

  • KIMHR
    KIMHR

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

    소스코드

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

    9년 전
1개의 댓글이 있습니다.
  • JongMan
    JongMan

    maxCut()이 틀린거 같네요.

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


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