알고리즘

[백준, 파이썬, 1063번] 킹

hminor 2023. 12. 22. 13:25

풀이

  • 우선 좌표에 대한 dictionary를 미리 만들어두어 간단하게 방향을 찾을 수 있도록 함.
  • 이후 킹과 돌의 좌표값을 확인한 이후 주어지는 방향에 따른 조건 분기 처리를 하여 좌표 이동을 시킴
  • 여기서 조금 코드가 길어진 부분은 킹은 움직일 수 있지만 돌이 더이상 이동할 범위를 벗어날 경우에 대한 부분으로 
  • 물론 더 좋은 코드가 있겠지만 아래와 같이 해결.

 

i
import sys
input = sys.stdin.readline

move = {
    "T": [1,0],
    "B": [-1,0],
    "L": [0,-1],
    "R": [0,1],
    "LT": [1,-1],
    "RT": [1,1],
    "LB": [-1,-1],
    "RB": [-1,1],
    }

k,s,n = input().rstrip('\n').split()
k_pos,s_pos = [int(k[1]),ord(k[0])-64], [int(s[1]),ord(s[0])-64]

for _ in range(int(n)):
    y,x = move[input().rstrip('\n')]
    if 1<=k_pos[0]+y<=8 and 1<=k_pos[1]+x<=8:
        if k_pos[0]+y == s_pos[0] and k_pos[1]+x == s_pos[1] and 1<=s_pos[0]+y<=8 and 1<=s_pos[1]+x<=8:
            s_pos = [s_pos[0]+y,s_pos[1]+x]
        elif k_pos[0]+y == s_pos[0] and k_pos[1]+x == s_pos[1] and not(1<=s_pos[0]+y<=8 and 1<=s_pos[1]+x<=8): continue
        k_pos = [k_pos[0]+y,k_pos[1]+x]
print(chr(k_pos[1]+64)+str(k_pos[0]))
print(chr(s_pos[1]+64)+str(s_pos[0]))