풀이


체스판에 주어진 킹을 명령어에 따라 움직이며 최종 위치를 반환하는 문제이다.

이 때 체스판에 돌맹이가 주어지는데 킹이 밀면서 움직일 수 있다.

먼저 주어진 명령어에 따른 이동좌표를 딕셔너리에 담아 저장한다.

이후 입력받은 좌표들을 배열좌표에 맞춰서 바꿔준 후 명령어 반복문을 실행한다.

받은 명령어에 따라 킹의 좌표가 바뀔텐데 체스판을 벗어날 경우 명령이 무시되니 킹의 다음좌표가 범위 내인지부터 판단한다.

이후 고려해야할 점은 돌맹이가 있는 위치로 이동했을 경우이다.

돌맹이가 있는 위치로 이동해야할 경우 돌맹이 역시 같은 방향으로 이동해야하기 때문에 돌맹이가 체스판의 범위 내에 있는 지 까지 고려해준다.

위 조건들을 판단하여 킹과 돌맹이의 좌표를 계속 업데이트 해준다.

모든 명령문이 끝나면 출력조건에 맞춰 킹과 돌맹이의 좌표를 출력한다.

소스코드


# 킹
from collections import deque
import sys
input = sys.stdin.readline
 
d = {"R":(1, 0), "L":(-1, 0), "B":(0, -1), "T":(0, 1), "RT":(1, 1), "LT":(-1, 1), "RB":(1, -1), "LB":(-1, -1), }
 
king, rock, n = input().rstrip().split()
kx = ord(king[0]) - 65
ky = int(king[1]) - 1
rx = ord(rock[0]) - 65
ry = int(rock[1]) - 1
 
for _ in range(int(n)):
    cmd = input().rstrip()
    dx, dy = d[cmd]
    nkx = kx + dx
    nky = ky + dy
    nrx = rx + dx
    nry = ry + dy
    if 0 <= nkx < 8 and 0 <= nky < 8:
        if nkx == rx and nky == ry:
            if 0 <= nrx < 8 and 0 <= nry < 8:
                kx, ky, rx, ry = nkx, nky, nrx, nry
        else:
            kx, ky = nkx, nky
 
print(chr(kx+65) + str(ky+1))
print(chr(rx+65) + str(ry+1))

References