문제
1063번: 킹
8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는
www.acmicpc.net
코드
a={'A':0,'B':1,'C':2,'D':3,'E':4,'F':5,'G':6,'H':7}
b = {v: k for k, v in a.items()}
d = {'R':(0,1),'L':(0,-1),'B':(-1,0),'T':(1,0),'RT':(1,1),'LT':(1,-1),'RB':(-1,1),'LB':(-1,-1),}
king, stone,n=input().split()
n=int(n)
king_loc = [int(king[1])-1,a[king[0]]]
stone_loc = [int(stone[1])-1,a[stone[0]]]
for _ in range(n):
move=input()
i,j = d[move]
if 0<=king_loc[0]+i<8 and 0<=king_loc[1]+j<8:
if(king_loc[0]+i==stone_loc[0] and king_loc[1]+j==stone_loc[1]):
if(0<=stone_loc[0]+i<8 and 0<=stone_loc[1]+j<8):
stone_loc[0]+=i
stone_loc[1]+=j
king_loc[0]+=i
king_loc[1]+=j
else:
king_loc[0]+=i
king_loc[1]+=j
print(b[king_loc[1]]+str(king_loc[0]+1))
print(b[stone_loc[1]]+str(stone_loc[0]+1))
풀이
- 체스판에서 돌과 킹의 위치를 움직인 후 위치를 출력해라
- 킹과 돌 그리고 움직이는 횟수 n을 입력 받는다.
- 입력 받은 좌표값을 정수로 바꿔주고 움직임을 입력받으며 움직인다.
- 킹의 다음 움직임이 체스판 안에 있고, 그곳이 돌의 위치가 아닐경우
- 킹의 다음 움직임이 체스판 안에 있고, 그곳이 돌의 위치이고, 돌을 킹과 같은 방향으로 움직였을 때 체스판 안에 있는 경우
- 움직이는 경우는
- 다 움직인 후 정수를 다시 체스판 위치 문자열로 바꾸서 출력한다.
특이사항
- 처음에는 직접 체스판을 구현하려고 했지만, 단순히 좌표만 구하는 거면 굳이 안그래도 되겠다고 생각
'알고리즘' 카테고리의 다른 글
[백준] 15663 N과M (9) python (0) | 2024.03.18 |
---|---|
[프로그래머스] 여행경로 python (2) | 2024.03.12 |
[백준] 25709 1 빼기 python (0) | 2024.02.29 |
[백준] 1535 안녕 python (1) | 2024.02.28 |
[백준] 17485 진우의 달 여행 (Large) python (1) | 2024.02.27 |