Python3
# 1063
# 돌과 같은 곳으로 이동할 때는 돌을 킹이 이동하는 방향으로 한 칸 이동.
# 킹이나 돌이 체스판 밖으로 나가는 경우는 건너뜀.
# 마지막 위치 출력 #
# 인덱스 범위 벗어났는지 체크 벗어나면 0
def indexCheck(x, y):
if x < 0 or x >= 8 or y < 0 or y >= 8:
return 0
return 1
# 이동
def move(x, y, direction):
# 위부터 시계방향
dx = [0, 1, 1, 1, 0, -1, -1, -1]
dy = [1, 1, 0, -1, -1, -1, 0, 1]
if "T" == direction:
idx = 0
elif "RT" == direction:
idx = 1
elif "R" == direction:
idx = 2
elif "RB" == direction:
idx = 3
elif "B" == direction:
idx = 4
elif "LB" == direction:
idx = 5
elif "L" == direction:
idx = 6
elif "LT" == direction:
idx = 7
return (x + dx[idx], y + dy[idx])
# 숫자 좌표 -> 영어 좌표
def numToEn(x, y):
x = chr(x + 65)
y = str(y + 1)
return x + y
# 영어좌표 -> 숫자좌표 (입력은 A1꼴, 리턴은 (0, 0)꼴)
def enToNum(en):
x = en[0]
y = int(en[1])
x = ord(x) - 65
y -= 1
return (x, y)
def main():
K, S, N = input().split()
Kx, Ky = enToNum(K)
Sx, Sy = enToNum(S)
for _ in range(int(N)):
direction = input()
new_Kx, new_Ky = move(Kx, Ky, direction)
new_Sx = Sx
new_Sy = Sy
# 위치 겹치는 경우 - S도 이동
if new_Kx == Sx and new_Ky == Sy:
new_Sx, new_Sy = move(Sx, Sy, direction)
# 인덱스 벗어남 - 원복
if 0 == indexCheck(new_Kx, new_Ky) or 0 == indexCheck(new_Sx, new_Sy):
continue
Kx = new_Kx
Ky = new_Ky
Sx = new_Sx
Sy = new_Sy
print(numToEn(Kx, Ky))
print(numToEn(Sx, Sy))
main()
깉은 복사 얕은 복사 생각하기 귀찮고,
그냥 처음부터 Kx, Ky, Sx, Sy로 변수를 나눠서 생각할 걸 그랬다.
원래는 좌표를 (1, 2) 꼴로 받아서 처리하려했는데 얕은복사 때문에 잘 안됐었다.
시간 낭비만 함...