프로그래밍/코드업 일기

코드업(Codeup) 4691 : 주사위 네 개

Jaebins 2023. 8. 10. 14:14
반응형
import java.util.List;
import java.util.Scanner;
import java.util.Vector;
import java.util.Arrays;

public class Main {
    static Result[] rss;

    static class Result{
        int rollsNum = 0;
        int bonus_rollsNum = 0;
        int rulesIndex = 4;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int cnt = sc.nextInt();
        int[][] rolls = new int[cnt][4];
        rss = new Result[cnt];

        for(int i = 0; i < cnt; i++) {
            for(int j = 0; j < 4; j++) {
                rolls[i][j] = sc.nextInt();
            }

            int dobuleCnt = 0;
            Result rs = new Result();

            for(int j = 0; j < 4; j++) {
                int sameCnt = 0;

                for(int k = j + 1; k < 4; k++) {
                    if(rolls[i][j] == rolls[i][k]) {
                        sameCnt++;
                    }
                }

                if(sameCnt == 1) dobuleCnt++;

                rs.rollsNum = (rs.rollsNum < sameCnt) || (rs.rulesIndex == 4 && rs.rollsNum < rolls[i][j]) ? rolls[i][j] : rs.rollsNum;
                rs.rulesIndex = rs.rulesIndex > Judge(sameCnt, dobuleCnt) ? Judge(sameCnt, dobuleCnt) : rs.rulesIndex;
                rs.bonus_rollsNum = dobuleCnt == 2 ? rolls[i][j] : rs.bonus_rollsNum;

                if(dobuleCnt == 2) dobuleCnt = 0;
            }

            rss[i] = rs;
        }

        int rs = 0;

        for(int i = 0; i < rss.length; i++) {
            rs = rs < caclulateRs(rss[i]) ? caclulateRs(rss[i]) : rs;
        }

        System.out.println(rs);
    }

    static int caclulateRs(Result rsInfor) {
        int rs = 0;
    //		System.out.printf("%d %d\n", rsInfor.rollsNum, rsInfor.bonus_rollsNum);

        switch(rsInfor.rulesIndex) {
            case 0:
                rs = 50000 + rsInfor.rollsNum * 5000;
                break;
            case 1:
                rs = 10000 + rsInfor.rollsNum * 1000;
                break;
            case 2:
                rs = 2000 + rsInfor.rollsNum * 500 + rsInfor.bonus_rollsNum * 500;
                break;
            case 3:
                rs = 1000 + rsInfor.rollsNum * 100;
                break;
            case 4:
                rs = rsInfor.rollsNum * 100;
                break;
        }

    //		System.out.println(rs);
        return rs;
    }

    static int Judge(int sameCnt, int doubleCnt) {
        int ruleCnt = 4;

        switch(sameCnt) {
            case 3:
                ruleCnt = 0;
                break;
            case 2:
                ruleCnt = 1;
                break;
            case 1:
                if(doubleCnt == 2) ruleCnt = 2;
                else ruleCnt = 3;
                break;
        }

        return ruleCnt;
    }
}
반응형