알고리즘
BOJ16675 두 개의 손 java
kkoon9
2022. 2. 16. 09:56
핵심
무조건 이기려면 상대방이 같은 거 낼 경우밖에 없다.
그러므로 조건문을 다양하게 사용해서 분기 처리해줬다.
반례로 R R S R를 통해 비기는 경우까지 확인해주어 문제를 해결하였다.
import java.io.*;
import java.util.*;
class Main {
static Map<String, String> winMap = new HashMap<>();
static final String DRAW = "DRAW";
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
winMap.put("P", "R");
winMap.put("R", "S");
winMap.put("S", "P");
String ms1 = st.nextToken();
String ms2 = st.nextToken();
String tk1 = st.nextToken();
String tk2 = st.nextToken();
String ms1Vstk1 = whoWin(ms1, tk1);
String ms1Vstk2 = whoWin(ms1, tk2);
String ms2Vstk1 = whoWin(ms2, tk1);
String ms2Vstk2 = whoWin(ms2, tk2);
if (ms1.equals(ms2) && tk1.equals(tk2) && ms1.equals(tk1)) {
System.out.println("?");
return;
}
if (ms1.equals(ms2)) {
if (ms1Vstk1.equals("TK") || ms1Vstk2.equals("TK")) {
System.out.println("TK");
} else if(ms1Vstk1.equals("DRAW") || ms1Vstk2.equals("DRAW")){
System.out.println("?");
} else {
System.out.println("MS");
}
return;
}
if (tk1.equals(tk2)) {
if (ms1Vstk1.equals("MS") || ms2Vstk1.equals("MS")) {
System.out.println("MS");
} else if (ms1Vstk1.equals("DRAW") || ms2Vstk1.equals("DRAW")) {
System.out.println("?");
} else {
System.out.println("TK");
}
return;
}
System.out.println("?");
}
private static String whoWin(String ms, String tk) {
String msWin = winMap.get(ms);
String tkWin = winMap.get(tk);
if (msWin.equals(tk)) {
return "MS";
}
if (tkWin.equals(ms)) {
return "TK";
}
return DRAW;
}
}