[백준 17122] 체스 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
8 × 8
크기의 체스판 위에 두 칸이 주어졌을 때, 두 칸이 같은 색인지 판별하는 문제입니다.
한 칸은 열과 행으로 구성된 표기(A1, H8)
로 주어지고, 다른 한 칸은 1부터 64까지 매겨진 고유 번호
로 주어집니다.
입력으로 주어진 두 칸이 체스판 위에서 같은 색인지에 대한 여부를 판단하여 "YES"
또는 "NO"
를 출력합니다.
체스판에서는 각 칸의 색
을 열 번호
와 행 번호
를 기준으로 결정할 수 있습니다.
열과 행 번호를 더한 값이 짝수
이면 흰색
, 홀수
이면 검은색
이 됩니다.
따라서, 주어진 칸을 열과 행 좌표로 변환한 뒤, 이 규칙을 적용해 색을 판단할 수 있습니다.
접근법
- 문자열로 주어진 칸은 첫 번째 문자를 이용해 열 번호를 정하고, 두 번째 문자를 이용해 행 번호를 정합니다.
- 번호로 주어진 칸은
8
로 나눈 나머지를 통해 열을 결정하고,8
로 나눈 몫을 통해 행을 결정합니다. - 이후 두 칸의 열과 행 번호를 합산하여 색을 판별한 뒤 두 칸의 색이 같은지 비교합니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
class Program {
static void Main() {
int t = int.Parse(Console.ReadLine());
for (int i = 0; i < t; i++) {
var parts = Console.ReadLine().Split();
string s = parts[0];
int n = int.Parse(parts[1]);
int x1 = s[0] - 'A';
int y1 = s[1] - '1';
int x2 = (n - 1) % 8;
int y2 = (n - 1) / 8;
Console.WriteLine(((x1 + y1) % 2 == (x2 + y2) % 2) ? "YES" : "NO");
}
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t; cin >> t;
while (t--) {
string s; int n; cin >> s >> n;
int x1 = s[0] - 'A', y1 = s[1] - '1';
int x2 = (n - 1) % 8, y2 = (n - 1) / 8;
cout << (((x1 + y1) % 2 == (x2 + y2) % 2) ? "YES" : "NO") << "\n";
}
return 0;
}