백준 문제 링크
킹
- king과 stone의 좌표를 각각 나타내준다.
A1이면 [1,1]로, A2이면 [1,2]로- 갈 수 있는 8방향을 steps에 딕셔너리 형태로 넣어주었다.
만약 방향이 B라면, 즉 아래로 간다면 A1일 때 [1,0]으로 이동한다.- king의 다음 좌표를 king_delta에, stone의 다음 좌표를 stone_delta에 넣고
- king_delta가 범위 안에 있을 때
- king_delta와 stone이 같을 때 ( king이 가야할 다음 자리에 stone이 있다면)
- stone_delta가 범위 안에 있다면 -> king, stone 모두 자리를 한칸씩 이동함
king = king_delta로 변경
stone = stone_delta로 변경- king_delta와 stone이 다르다면 -> king만 이동
king = king_delta로 변경
- 마지막으로 king과 stone의 좌표를 문제에서 요구하는 형식대로 출력하면 끝!
king, stone, N = input().split()
king = [ord(king[0]) - ord("A") + 1, int(king[1])]
stone = [ord(stone[0]) - ord("A") + 1, int(stone[1])]
steps = {'R' : (1,0), 'L' : (-1,0), 'B' : (0,-1), 'T' : (0,1),
'RT' : (1,1), 'LT' : (-1,1), 'RB' : (1,-1), 'LB' : (-1,-1)}
for _ in range(int(N)):
step = input()
king_delta = [king[0] + steps[step][0], king[1] + steps[step][1]] # king의 다음 좌표
stone_delta = [stone[0] + steps[step][0], stone[1] + steps[step][1]] # stone의 다음 좌표
if 1 <= king_delta[0] <= 8 and 1 <= king_delta[1] <= 8:
if king_delta == stone: # king의 다음 위치에 돌이 있을 때
if 1 <= stone_delta[0] <= 8 and 1 <= stone_delta[1] <= 8:
king = king_delta
stone = stone_delta
else: # king의 다음 위치에 돌이 없을 때
king = king_delta
print(chr(king[0] + ord('A') - 1) + str(int(king[1])))
print(chr(stone[0] + ord('A') - 1) + str(int(stone[1])))