문제
해결 과정
- 움직이는 정보를
dictionary
로 선언
- 열의 정보는
ord
를 사용하여 숫자로 변환 (A~H <-> 0~7)
- 조건문으로 조건을 잘 설정해준다.
king
을 움직였을 때 체스판 범위 내에 있다면 움직인다.
king
이 움직였는데 해당 위치가 stone
일 때 stone
도 같이 움직인다. 그때 체스판 범위 내이어야 함
- 근데
stone
이 움직였을 때 체스판 범위가 아니라면 king
을 다시 원래 상태로 되돌려서 해당 이동을 건너뛴다.
시행착오
체스판에는 돌이 하나 있는데, 돌과 같은 곳으로 이동할 때는, 돌을 킹이 움직인 방향과 같은 방향으로 한 칸 이동시킨다.
- 처음에는 돌이랑 킹이랑 똑같이 움직이는 줄 알았는데,
- 돌이 있는 곳에 킹이 온다면 같은 방향으로 돌을 이동시킨다는 것
- 킹이 움직였는데 그 자리에 돌이 있다면 돌을 움직인다.
- 돌이 움직인 후의 자리가 체스판 밖일 때 킹을 다시 원래 자리로 되돌린 후 그 이동은 건너 뛰는 것
풀이
import sys
k, s, n = sys.stdin.readline().split()
direction = {
'R':[0,1],'L':[0,-1],'B':[-1,0],'T':[1,0],
'RT':[1,1],'LT':[1,-1],'RB':[-1,1],'LB':[-1,-1],
}
king = [int(k[1]),ord(k[0])-65]
stone = [int(s[1]),ord(s[0])-65]
move = []
for i in range(int(n)):
move.append(sys.stdin.readline().strip())
if 1 <= king[0] + direction[move[i]][0] <= 8 and 0 <= king[1] + direction[move[i]][1] < 8:
king = [king[0] + direction[move[i]][0],king[1] + direction[move[i]][1]]
if king == stone:
if 1 <= stone[0] + direction[move[i]][0] <= 8 and 0 <= stone[1] + direction[move[i]][1] < 8:
stone = [stone[0] + direction[move[i]][0], stone[1] + direction[move[i]][1]]
else:
king = [king[0] - direction[move[i]][0],king[1] - direction[move[i]][1]]
print(chr(65+king[1])+str(king[0]))
print(chr(65+stone[1])+str(stone[0]))