문제 개요
체스판 좌표란 체스판 위 특정 칸의 위치를 나타내는 문자열로, 열을 의미하는 알파벳과 행을 의미하는 숫자가 조합된 형태입니다. 예를 들어 "f5"처럼 표현됩니다.
이번 글에서는 주어진 좌표에 해당하는 칸이 흰색인지 판별하는 파이썬 프로그램을 작성해 보겠습니다. 칸이 흰색이면 True를, 검은색이면 False를 반환하면 됩니다.
예를 들어 입력이 "f5"라면 출력 결과는 True입니다.
접근 방법
체스판의 색상 패턴을 자세히 살펴보면, 열을 나타내는 알파벳의 아스키(ASCII) 코드 값과 행을 나타내는 숫자의 홀짝성(2로 나눈 나머지)을 비교하는 것만으로 칸의 색을 쉽게 알아낼 수 있습니다.
- 좌표의 첫 번째 문자(열)의 아스키 코드 값을 2로 나눈 나머지와, 두 번째 문자(행)를 정수로 변환한 값의 2로 나눈 나머지가 서로 같으면 → 검은 칸이므로 False 반환
- 서로 다르면 → 흰 칸이므로 True 반환
구현 예제
def solve(coordinate): if (ord(coordinate[0]))%2 == int(coordinate[1])%2: return False else: return True coordinate = "f5" print(solve(coordinate))
입력
"f5"
출력
True
동작 원리 상세 설명
예제의 "f5"를 단계별로 분석해 보겠습니다. 먼저 문자 'f'의 아스키 코드 값은 102이며, 이를 2로 나눈 나머지는 0입니다. 반면 행 값 5를 2로 나눈 나머지는 1입니다. 두 나머지가 서로 다르기 때문에 함수는 True를 반환하며, 이는 f5 칸이 흰색임을 의미합니다.
반대로 "a1"의 경우 문자 'a'의 아스키 코드 값은 97(홀수)이고 행 값도 1(홀수)이므로 나머지가 같아 False가 반환됩니다. 실제 체스판에서 a1은 검은 칸이므로 결과가 정확히 일치합니다.
이 방식은 단순한 나눗셈 연산만 사용하므로 시간 복잡도가 O(1)입니다. 즉, 어떤 좌표가 입력되더라도 항상 일정한 시간 안에 즉시 결과를 얻을 수 있다는 장점이 있습니다.