본문 바로가기
문제 풀이/백준

[Python] 백준 23885 - 비숍 투어

by JJong | 쫑 2022. 5. 11.

문제 보러 가기

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좌표가 서로 다른 수이어야 한다.


35점은 처음에 판의 크기가 1일때를 고려하지 못해 받았다.

 

댓글