[백준/ Python] 1063번 - 킹

Sujin Lee·2022년 6월 22일
0

코딩테스트

목록 보기
71/172
post-thumbnail

문제

1063번 - 킹

해결 과정

  • 움직이는 정보를 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],
}
# 행, 열
# 행 범위: 1 ~ 8
# 열 범위: 0 ~ 7
king = [int(k[1]),ord(k[0])-65]
stone = [int(s[1]),ord(s[0])-65]
move = []


for i in range(int(n)):
  # move = ['B', 'L', 'LB', 'RB', 'LT']
  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]))
profile
공부한 내용을 기록하는 공간입니다. 📝

0개의 댓글