문제번호: 18939
문제명: 경비병 세우기 게임
문제링크: https://www.acmicpc.net/problem/18939
문제내용과 예제 입/출력은 위 문제 링크에서 확인해 주시기 바랍니다
오늘은 처음으로 다이아 4 티어 문제를 풀었습니다. 경비병 세우기 게임이란 N과 M크기의 격자판에서 K*K정사각형들이 있을 때 모든 K*K 칸에 경비병이 1 이상 있을 경우 안전상태가 되고, Platina와 Yuto 둘 중 한 명이 먼저 안전상태를 만들 경우 이긴 사람의 이름을 출력하는 문제입니다.
문제 상황을 2가지로 나누어보았습니다.
첫번째 상황은 격자판이 너무 작아서(Math.Max(N, M) < K * 2) 먼저 경비를 하나라도 두는 사람이 이기는 경우입니다. 이 경우에는 항상 Yuto가 선이기 때문에 Yuto가 승리하게 됩니다.
두 번째 상황은 모든 격자판을 채우는 경우의 수입니다. 물론 최소의 경비만으로 안전상태를 충족시킬 수 있지만, 양쪽 플레이어는 '이기기 위한 최선의 선택'을 매번 해야 하기 때문에 안전상태를 만들 수 없도록 다른 곳에 둘 수 있고 결국에는 모든 격자판이 채워지기 전까지는 게임이 끝나지 않습니다. 그렇게 제일 마지막에 안전상태로 수를 마무리한 플레이어가 승리하게 됩니다.
다음은 정답코드입니다.
public static void Main()
{
using StreamReader sr = new StreamReader(Console.OpenStandardInput());
using StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
int n = int.Parse(sr.ReadLine());
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++)
{
string[] input = sr.ReadLine().Split();
long N = long.Parse(input[0]);
long M = long.Parse(input[1]);
long K = long.Parse(input[2]);
if (Math.Max(N, M) < K * 2)
{
sb.AppendLine("Yuto");
}
else
{
if ((N * M) % 2 == 0)
{
sb.AppendLine("Platina");
}
else
{
sb.AppendLine("Yuto");
}
}
}
sw.Write(sb.ToString());
sr.Close();
sw.Close();
}
'알고리즘 풀이' 카테고리의 다른 글
| [C#] 백준 2467번 문제풀이 (0) | 2026.02.26 |
|---|---|
| [C#] 백준 2606번 문제풀이 (0) | 2026.02.26 |
| [C#] 백준 2217번 문제풀이 (0) | 2026.02.22 |
| [C#] 백준 1269번 문제풀이 (0) | 2026.02.21 |
| [C#] 백준 1026번 문제풀이 (0) | 2026.02.20 |