🌞Algorithm/🔥Baekjoon

[Baekjoon] 3443_Reaux! Sham! Beaux!

뿌야._. 2025. 7. 30. 11:55
문제(출처: 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