개발자 톡
연습문제 톡
루돌프 월드컵
java 정답코드 - 확률값 변수 타입 유의
- 등록일
- 2025-01-29 17:01:17
- 조회수
- 178
- 작성자
- tjsqls2067
import java.io.*; import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] powers = new int[4]; for(int i = 0; i < 4; i++){ powers[i] = sc.nextInt(); } // 1. 전체 승패에 대한 모든 경우 생성 // [(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)] int[][] battleArr = {{0,1},{0,2},{0,3},{1,2},{1,3},{2,3}}; LinkedList<String> battleStack = new LinkedList<>(); ArrayList<String[]> battleResultArr = new ArrayList<>(); battle(battleStack, battleResultArr); double probSum = 0.0d; // 2. 각 조합에서의 각각의 루돌프 승점 계산 for(String[] resultArr : battleResultArr){ int[] points = new int[4]; double probSumTmp = 1.0d; for(int idx = 0; idx < resultArr.length; idx++){ String rst = resultArr[idx]; int i = battleArr[idx][0]; int j = battleArr[idx][1]; if("W".equals(rst)){ points[i] += 3; probSumTmp *= winProbability(powers[i],powers[j]); }else if("L".equals(rst)){ points[j] += 3; probSumTmp *= loseProbability(powers[i],powers[j]); }else if("S".equals(rst)){ points[i] += 1; points[j] += 1; probSumTmp *= sameProbability(powers[i],powers[j]); } } int biggerThan1st = 0; for(int idx = 1; idx < 4; idx++){ if(points[0] < points[idx]) biggerThan1st++; } if(biggerThan1st <= 1){ // 3. 확률 합산 probSum += probSumTmp; } } System.out.println(probSum * 100); System.out.printf("%.3f",Math.round(probSum * 100 * 1000) / 1000.0d); } private static void battle(LinkedList<String> battleStack, ArrayList<String[]> battleResultArr){ if(battleStack.size() == 6){ battleResultArr.add(battleStack.toArray(new String[0])); return; } String[] result = {"W","L","S"}; for(String rst : result){ battleStack.push(rst); battle(battleStack, battleResultArr); battleStack.pop(); } } private static double winProbability(int Fi, int Fj){ return 4.0 * Fi / (5 * Fi + 5 * Fj); } private static double loseProbability(int Fi, int Fj){ return 4.0 * Fj / (5 * Fi + 5 * Fj); } private static double sameProbability(int Fi, int Fj){ return (Fi + Fj) / (5.0 * Fi + 5.0 * Fj); } }
#루돌프_월드컵