FESITVAL 비용 최소값 구하는 알고리즘 질문 드립니다.(JAVA)

  • uyu423
    uyu423

    FESTIVAL 문제를 JAVA 연습겸 풀고 있습니다.

    데이터 입력이 잘 되는 것도 확인했고 소수점 자리도 확인했고 테스트 케이스도 몇가지 돌려본 결과 문제 없이 구동했으나 오답인걸 보니 제가 놓치고 있는 부분이 있나 생각이 됩니다.

    문제가 되리라 추측되는 클래스는 dayCalc 클래스 입니다.
    내부의 for문에서는 역순으로 굴러가면서 날짜의 비용을 조합해 최소값을 찾습니다.
    만약 6일간 3팀이 공연한다면
    6 5 4 3 2 1
    6 5 4 3 2
    6 5 4 3
    6 5 4
    6 5
    6
    각 날짜의 비용을 종합하여 평균 비용을 낸 후 각 케이스에서 팀의 갯수(3) 보다 적은 케이스(위에서는 6 5, 6)는 넘어간 후 나머지 케이스에서의 최소값을 출력하는 형태입니다.

    조언과 도움을 요청합니다 ㅜㅜ

    import java.util.Scanner;
    
    class festivalData {
    
        private int dayCount;
        private int teamnum;
    
        public int getDayCount() {
            return dayCount;
        }
    
        public void setDayCount(int dayCount) {
            this.dayCount = dayCount;
        }
    
        public int getTeamnum() {
            return teamnum;
        }
    
        public void setTeamnum(int teamnum) {
            this.teamnum = teamnum;
        }
    
        @Override
        public String toString() {
            return "festivalData [dayCount=" + dayCount + ", teamnum=" + teamnum
                    + "]";
        }
    
    }
    
    class date {
        private int price;
    
        public int getPrice() {
            return price;
        }
    
        public void setPrice(int price) {
            this.price = price;
        }
    
        @Override
        public String toString() {
            return "date [price=" + price + "]";
        }
    
    }
    
    class dayCalc {
        private date[] day;
        private int dayCount;
        private int teamnum;
        private int sum = 0;
        private double min = 1000000;
        private int cnt = 0;
    
        public dayCalc(date[] day, int dayCount, int teamnum) {
            this.day = day;
            this.dayCount = dayCount;
            this.teamnum = teamnum;
        }
    
        public double returnValue() {
            for (int i = this.dayCount - 1; i >= 0; i--) {
                for (int j = i; j < this.dayCount; j++) {
                    sum = sum + day[j].getPrice();
                    cnt++;
                    if (this.cnt >= this.teamnum) {
                        if (this.min > (double) sum / cnt) {
                            this.min = (double) sum / cnt;
                        }
                    }
                }
                this.cnt = 0;
                this.sum = 0;
            }
            return min;
        }
    }
    
    class dayManager {
    
        Scanner scan = new Scanner(System.in);
        public static int totalFestival;
        festivalData fes = new festivalData();
        private date[] day;
    
        public void setFestivalData() {
            fes.setDayCount(scan.nextInt());
            fes.setTeamnum(scan.nextInt());
            // System.out.println(fes.toString());
            date[] day = new date[fes.getDayCount()];
    
            for (int i = 0; i < fes.getDayCount(); i++) {
                day[i] = new date();
                day[i].setPrice(scan.nextInt());
                // System.out.println(day[i].toString() + " ");
            }
    
            dayCalc cal = new dayCalc(day, fes.getDayCount(), fes.getTeamnum());
            System.out.printf("%.8f\n", cal.returnValue());
        }
    
    }
    
    public class Main {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner scan = new Scanner(System.in);
            dayManager man = new dayManager();
            dayManager.totalFestival = scan.nextInt();
            for (int i = 0; i < dayManager.totalFestival; i++) {
                man.setFestivalData();
            }
        }
    }
    

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