[백준/파이썬] 1063번 킹 풀이
업데이트:
문제 정보
- 문제 출처: 백준 온라인 저지
- 문제 링크: 1063번 킹
- 문제풀이 코드 GitHub 링크
- 제출 언어: Python 3
풀이
문제
체스판 위 킹과 돌의 초기 위치가 주어지고, 이동 명령을 순서대로 수행했을 때 최종 위치를 출력하는 문제입니다.
킹이 돌 위치로 이동하면 돌도 같은 방향으로 밀립니다.
코드
k,s,n=input().split()
k,s,n=list(k),list(s),int(n)
k,s=(ord(k[0])-ord('A')+1,int(k[1])),(ord(s[0])-ord('A')+1,int(s[1]))
def move(x,y):
global k,s
tk,ts=(k[0]+x,k[1]+y),s
if tk==s: ts=(s[0]+x,s[1]+y)
if (0 < tk[0] <= 8) and (0 < tk[1] <= 8) and\
(0 < ts[0] <= 8) and (0 < ts[1] <= 8): k,s=tk,ts
for i in range(n):
command=input()
if command == 'R': move(1,0)
elif command == 'L': move(-1,0)
elif command == 'B': move(0,-1)
elif command == 'T': move(0,1)
elif command == 'RT': move(1,1)
elif command == 'LT': move(-1,1)
elif command == 'RB': move(1,-1)
elif command == 'LB': move(-1,-1)
k,s=(chr(k[0]+ord('A')-1),str(k[1])),(chr(s[0]+ord('A')-1),str(s[1]))
k,s=''.join(k),''.join(s)
print(k)
print(s)
설명
좌표를 숫자로 변환해서 처리한 뒤, 마지막에 체스 표기(A1 형태)로 다시 바꿉니다.
이동마다:
- 킹의 다음 위치 계산
- 킹이 돌과 겹치면 돌도 같은 방향으로 이동
- 둘 중 하나라도 판 밖이면 해당 명령 무시
규칙을 그대로 시뮬레이션하면 됩니다.
댓글남기기