https://www.acmicpc.net/problem/1063
1063번: 킹
8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는
www.acmicpc.net
https://github.com/stellaluminary/Baekjoon
GitHub - stellaluminary/Baekjoon
Contribute to stellaluminary/Baekjoon development by creating an account on GitHub.
github.com
문자열에 따른 변환이 여러번 이뤄지는 문제이다.
변환과 역변환을 잘 조율할 수 있도록 세심한 주의가 필요하다.
팁을 주자면
행과 열에 대한 순서, 그리고 움직임에 따른 움직인 정도를 잘 파악해야 한다.
조건문 역시 주어진 내용을 수행할 수 있도록 해야한다.
k, r, n = input().split()
moves = [input() for i in range(int(n))]
m = {'R':[0,1], 'L':[0,-1], 'B':[-1,0], 'T':[1,0],
'RT':[1,1], 'LT':[1,-1], 'RB':[-1,1], 'LB':[-1,-1]}
alpha = {chr(i):ord(chr(i))-ord('A') for i in range(65, 73)}
rev_alpha = {i:chr(i+65) for i in range(8)}
kx, ky = int(k[1])-1, alpha[k[0]]
rx, ry = int(r[1])-1, alpha[r[0]]
maps = [[0]*8 for _ in range(8)]
for i in range(len(moves)):
move = m[moves[i]]
nkx, nky = kx + move[0], ky + move[1]
if nkx < 0 or nky < 0 or nkx >= 8 or nky >= 8:
continue
if nkx == rx and nky == ry:
nrx, nry = rx + move[0], ry + move[1]
if nrx < 0 or nry < 0 or nrx >= 8 or nry >= 8:
continue
else:
kx, ky = nkx, nky
rx, ry = nrx, nry
else:
kx, ky = nkx, nky
print(rev_alpha[ky]+str(kx+1))
print(rev_alpha[ry]+str(rx+1))