BOOKSTORE 문제오답부분을 못찾겠습니다.

  • tajano5
    tajano5

    bookstore 오답이 어디서 났는지 몰라서 질문 드립니다. 각 서점별 배열을 새롭게 할당하고 책의 가격과 포인트를 적립받을 때 가장 작은 포인트를 가진 책을 마지막에 현재 포인트와 비교하여 계산하는 전략으로 풀었습니다. 도무지 어떤 부분에서 오답처리가 됐는지 모르겠습니다.
    아래는 테스트 결과와 해당소스입니다. 답변부탁드릴게요 ㅠㅠ
    1
    4 1
    50000 2000

    2000 1999

    4000 2001

    5000 2002

    54997

    1
    1 5
    1000 0 2000 1999 3000 2500 4000 2000 5000 200
    1000

    2
    2 1
    3000 2900
    1000 900
    1 2
    3000 2900 1000 900

    3000
    1000

    1
    4 1
    8000 7900
    3000 2000

    2000 1000

    1000 500

    8000

    1
    3 1
    5 3
    4 2
    1 0
    6

    import java.util.Arrays;
    import java.util.Scanner;

    public class BookStore1 {

    static Scanner stdin = new Scanner(System.in);
    static int N;
    static int M;
    static int[] res;
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int numOfTest = stdin.nextInt();
        res = new int[numOfTest];
    
        int[][] bookList = null;
        int[][][] depBooklist = null;
    
        int[] minPoint = null;
        int[] minPoint_book = null;
    
        int count = 0;
        int count_point = 0;
    
        for (int t = 0; t < numOfTest; t++) {
            N = stdin.nextInt();
            M = stdin.nextInt();
    
            bookList = new int[N][2 * M];
            depBooklist = new int[M][N][2];
    
    
            minPoint = new int[M];
            minPoint_book = new int[M];
    
    
            for (int i = 0; i < M; i++) {
                minPoint[i] = 10001;
            }
    
            for (int i = 0; i < N; i++) {
                count = 0;
                count_point = 0;
                for (int j = 0; j < 2 * M; j++) {
                    bookList[i][j] = stdin.nextInt();
    
                    if (j % 2 == 0) {
                        depBooklist[count][i][0] = bookList[i][j];
    
                        count++;
                    } else {
    
                        depBooklist[count_point][i][1] = bookList[i][j];
    
                        if (minPoint[count_point] > bookList[i][j]) {
                            minPoint[count_point] = bookList[i][j];
                            minPoint_book[count_point] = bookList[i][j - 1];
                        }
                        count_point++;
                    }
    
                }// 삼중 for 끝
            }// 이중 for 끝
    
    
            res[t]=check(depBooklist, minPoint, minPoint_book);
        }// for 끝
    
    
    
          for (int i : res) { System.out.println(i); }
    
    
    }
    
    // M N 2 minpoint minPoint_book은 M만큼 생성됨
    public static int check(int[][][] depBooklist, int[] minPoint, int[] minPoint_book) {
    
        int size = minPoint.length;
        int result;
        int[] bookCost = new int[size];
        int[] currPoint = new int[size];
    
        for (int i = 0; i < M; i++) {
    
            for (int j = 0; j < N; j++) {
    
                if(minPoint[i] != depBooklist[i][j][1]){
    
                    if(bookCost[i] == 0)
                    {
                        bookCost[i]=depBooklist[i][j][0]+bookCost[i];
                        currPoint[i]=depBooklist[i][j][1]+currPoint[i];
                    }
                    else if(depBooklist[i][j][0] >= currPoint[i]) {
    
                        bookCost[i]=depBooklist[i][j][0]+bookCost[i]-currPoint[i];
                        currPoint[i]=depBooklist[i][j][1];
    
                    }
                    else if(depBooklist[i][j][0] < currPoint[i]){
    
                        currPoint[i]=currPoint[i]-depBooklist[i][j][0]+depBooklist[i][j][1];
    
                    }
    
                }
            }// 이중 for 끝
    
        }// for 끝
    
        for (int i = 0; i < M; i++) {
            if(currPoint[i]<minPoint_book[i])
                bookCost[i]=minPoint_book[i]+bookCost[i]-currPoint[i];
    
        }
    
        Arrays.sort(bookCost);
        result=bookCost[0];
    
        return result;
    
    }

    }


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