문제 보러 가기
https://www.acmicpc.net/problem/23885
23885번: 비숍 투어
나이트 투어는 체스판에서 나이트가 모든 칸을 정확히 한 번씩 방문하는 경로를 찾는 문제이다. 체스 마스터 희자는 또 다른 마이너 피스인 비숍도 체스판을 자유롭게 여행할 수 있는지 궁금
www.acmicpc.net
해결방법
종이에 5*5 판을 그리고 규칙을 찾았다.
시작점이 (홀수, 짝수) 또는 (짝수, 홀수)인 경우는 아무리 이동해도 (짝수,짝수)나 (홀수,홀수)로 도착할 수 없다. 즉, (홀,짝) 또는 (짝,홀)이면 무조건 (홀,짝) 또는 (짝,홀)칸으로 도착한다.
반대로 (짝수, 짝수) 또는 (홀수, 홀수)인 경우는 (홀,홀) 또는 (짝,짝)칸으로만 도착할 수 있다.
위 특징으로 (x, y)라면 "x%2==y%2" 라는 조건식을 세웠다. 조건식이 참이라면 (짝,짝) 또는 (홀,홀)칸인 것이고, 거짓이라면 (짝,홀) 또는 (홀,짝)칸 위에 있는 것이다.
# 입력
N, M = map(int,input().split())
sx, sy = map(int,input().split())
ex, ey = map(int,input().split())
# 판의 크기가 a*1 or 1*a(혹은 1*1)이라면 이동자체가 불가능.
if N==1 or M==1:
if sx==ex and sy==ey:
print("YES")
else:
print("NO")
elif sx%2 == sy%2:
if ex%2 == ey%2:
print("YES")
else:
print("NO")
elif sx%2 != sy%2:
if ex%2 == ey%2:
print("NO")
else:
print("YES")
코드 설명
첫 조건문부터 차례대로 보겠다.
# 판의 크기가 a*1 or 1*a(혹은 1*1)이라면 이동자체가 불가능.
if N==1 or M==1:
if sx==ex and sy==ey:
print("YES")
else:
print("NO")
N, M 둘 중 하나라도 1인 경우는 비숍이 이동할 수 없다. 따라서 시작점과 도착점이 일치하는 경우가 아니라면 NO를 출력한다.
elif sx%2 == sy%2:
if ex%2 == ey%2:
print("YES")
else:
print("NO")
시작점이 (홀,홀) 또는 (짝,짝)인 경우이다. 이 경우에는 도착점도 xy좌표가 모두 홀수이거나 짝수이어야만 한다. 따라서 그 경우에만 YES를 출력하고 나머지는 모두 NO를 출력한다.
elif sx%2 != sy%2:
if ex%2 == ey%2:
print("NO")
else:
위 경우는 시작점이 (홀,짝) 또는 (짝,홀)인 경우이다. 이 경우에는 도착점도 xy좌표가 서로 다른 수이어야 한다.
'문제 풀이 > 백준' 카테고리의 다른 글
[Python] 백준 2805 - 나무 자르기 (0) | 2022.05.19 |
---|---|
[Python] 백준 1002 - 터렛 (0) | 2022.05.15 |
[Python] 백준 6588 - 골드바흐의 추측 (0) | 2022.05.11 |
[Python] 백준 5747 - Odd or Even (0) | 2022.05.08 |
[Python] 백준 1439 - 뒤집기 (0) | 2022.05.07 |
댓글