문제(출처: https://www.acmicpc.net/problem/3443)
< Reaux! Sham! Beaux! >
문제 풀이
HashMap을 사용하여 언어별로 해당하는 Rock, Scissors, Paper을 저장한다. 이 HashMap을 사용하여 게임 결과를 구한다.
my solution (Java)
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.StringTokenizer;
public class _3443_ { // Reaux! Sham! Beaux!
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
HashMap<String, String> map = new HashMap<String, String>() {
{
put("Kamen", "Rock");
put("Rock", "Rock");
put("Pierre", "Rock");
put("Stein", "Rock");
put("Ko", "Rock");
put("Koe", "Rock");
put("Sasso", "Rock");
put("Roccia", "Rock");
put("Guu", "Rock");
put("Kamien", "Rock");
put("Piedra", "Rock");
put("Nuzky", "Scissors");
put("Scissors", "Scissors");
put("Ciseaux", "Scissors");
put("Schere", "Scissors");
put("Ollo", "Scissors");
put("Olloo", "Scissors");
put("Forbice", "Scissors");
put("Choki", "Scissors");
put("Nozyce", "Scissors");
put("Tijera", "Scissors");
put("Papir", "Paper");
put("Paper", "Paper");
put("Feuille", "Paper");
put("Papier", "Paper");
put("Carta", "Paper");
put("Rete", "Paper");
put("Paa", "Paper");
put("Papel", "Paper");
}
};
String str;
int turn = 1;
int player = 0;
String name[] = new String[2];
int score[] = new int[2];
while (true) {
str = bf.readLine();
if (str.equals("-") || str.equals(".")) {
bw.write("Game #" + (turn++) + ":\n");
for (int i = 0; i < 2; i++) {
bw.write(name[i] + ": " + score[i]);
if (score[i] == 1) {
bw.write(" point\n");
} else {
bw.write(" points\n");
}
}
if (score[0] == score[1]) {
bw.write("TIED GAME\n");
} else if (score[0] > score[1]) {
bw.write("WINNER: " + name[0] + "\n");
} else {
bw.write("WINNER: " + name[1] + "\n");
}
player = 0;
score = new int[2];
if (str.equals(".")) {
break;
}
bw.write("\n");
continue;
}
st = new StringTokenizer(str);
if (player < 2) {
st.nextToken();
name[player++] = st.nextToken();
} else {
String first = map.get(st.nextToken());
String second = map.get(st.nextToken());
if (first.equals(second)) {
continue;
} else {
if (first.equals("Rock")) {
if (second.equals("Scissors")) {
score[0] += 1;
} else if (second.equals("Paper")) {
score[1] += 1;
}
} else if (first.equals("Scissors")) {
if (second.equals("Rock")) {
score[1] += 1;
} else if (second.equals("Paper")) {
score[0] += 1;
}
} else if (first.equals("Paper")) {
if (second.equals("Rock")) {
score[0] += 1;
} else if (second.equals("Scissors")) {
score[1] += 1;
}
}
}
}
}
bw.flush();
}
}
변수)
HashMap : 각 언어별 Rock, Scissors, Paper 저장한 HashMap
str : 입력값
turn : 게임 번호
player : 플레이어 수
name, score : 플레이어 이름과 포인트
HashMap에 문제에서 제시한 각 언어별 Rock, Scissors, Paper을 저장한다. "."이 입력될 때까지 다음 과정을 반복한다.
1) "-"이나 "."이 입력되면 게임 결과를 출력하고 player와 score를 초기화한다. 이때, 입력값이 "."라면 종료한다.
2) player 값이 2보다 작다면 player 입력 중이므로 name에 player 이름을 저장한다.
3) player 값이 2 이상이라면 게임을 시작하므로 각각 값을 HashMap에서 찾아와 first, second에 저장한다. 두 개의 값이 같다면 다음 입력을 받고, 같지 않다면 가위바위보 계산을 통해 점수를 구한다.
'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글
[Baekjoon] 4865_Shortest Prefixes (2) | 2025.08.12 |
---|---|
[Baekjoon] 9609_PSU Campuses (1) | 2025.08.11 |
[Baekjoon] 9787_Olympic Games Ranking (4) | 2025.07.29 |
[Baekjoon] 9491_Politics (2) | 2025.07.28 |
[Baekjoon] 15198_NKD (2) | 2025.07.25 |