Problem Solving/Baekjoon
[백준] 27162 Yacht Dice - Brute Force / Java
graycode
2023. 11. 28. 13:31
• 문제 링크
27162번: Yacht Dice
《Yacht Dice》는 여러 명이 플레이하는 주사위 게임입니다. 플레이어는 우선 주사위를 $5$개 굴립니다. 이후 원하는 주사위를 고정시킨 뒤, 남은 주사위를 다시 굴리는 일을 두 번 이하로 할 수 있
www.acmicpc.net
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
public class Main {
static Map<Integer, Integer> map;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String s = br.readLine();
StringTokenizer st = new StringTokenizer(br.readLine());
Map<Integer, Integer> def = new HashMap<>();
int key;
for (int i = 0; i < 3; i++) def.put(key = Integer.parseInt(st.nextToken()), def.getOrDefault(key, 0) + 1);
int a = 1, b = 1, max = 0;
while (a != 6 || b != 7) {
if (b == 7) {
a++;
b = 1;
}
map = new HashMap<>(def);
map.put(a, map.getOrDefault(a, 0) + 1);
map.put(b, map.getOrDefault(b++, 0) + 1);
for (int i = 0; i < 12; i++) if (s.charAt(i) == 'Y') max = Math.max(max, choose(i));
}
bw.write(String.valueOf(max));
bw.flush();
}
private static int choose(int rule) {
int sum = 0;
switch (rule) {
case 0:
return map.getOrDefault(1, 0);
case 1:
return map.getOrDefault(2, 0) * 2;
case 2:
return map.getOrDefault(3, 0) * 3;
case 3:
return map.getOrDefault(4, 0) * 4;
case 4:
return map.getOrDefault(5, 0) * 5;
case 5:
return map.getOrDefault(6, 0) * 6;
case 6:
for (int key : map.keySet()) if (map.get(key) == 4) return map.get(key) * key;
return 0;
case 7:
if (map.size() != 2) return 0;
else {
boolean flag = false;
for (int key : map.keySet()) {
int value = map.get(key);
if (value == 3 || value == 2) flag = true;
sum += value * key;
}
return flag ? sum : 0;
}
case 8:
for (int key : map.keySet()) if (map.get(key) != 1 || key == 6) return 0;
return 30;
case 9:
for (int key : map.keySet()) if (map.get(key) != 1 || key == 1) return 0;
return 30;
case 10:
for (int key : map.keySet()) if (map.get(key) == 5) return 50;
return 0;
default:
for (int key : map.keySet()) sum += map.get(key) * key;
return sum;
}
}
}