Code in Life
[python] 백준 1063번 본문
문제링크: www.acmicpc.net/problem/1063
1063번: 킹
8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는
www.acmicpc.net
체스판에는 킹과 돌이 있는데, 킹이 움직이는 곳에 돌이 있다면 돌도 같은 방향으로 움직이는 문제다.
이 문제에서는 좌표가 A1, B1,... 처럼 주어지기 때문에 알파벳과 숫자를 나눠서 계산하면 헷갈려져서 실수를 범할 확률이 높아진다. 또한 움직이는 방향이 여러 경우가 존재하므로 이를 if elseif문으로 하면 코드의 가독성이 떨어져서 이 또한 문제 풀다가 실수할 확률이 높다. 그래서 움직이는 방향과 알파벳을 리스트에 담아 파이썬의 index(i) 함수를 통해 매칭되는 값을 찾는 방식으로 사용했다.
# silver5
import sys
#sys.stdin = open("input.txt","r")
dx = [1,-1,0,0,1,-1,1,-1]
dy = [0,0,-1,1,1,1,-1,-1]
move = ['R','L','B','T','RT','LT','RB','LB']
alpha = ['A','B','C','D','E','F','G','H']
king, stone, N = map(str,input().split())
k_pos = [alpha.index(king[0]), int(king[1])] # 0 ~ 7, 1 ~ 8
s_pos = [alpha.index(stone[0]), int(stone[1])] # 0 ~ 7, 1 ~ 8
for _ in range(int(N)):
idx = move.index(input())
# 다음 좌표를 정의
nx = k_pos[0] + dx[idx]
ny = k_pos[1] + dy[idx]
if nx < 0 or ny < 1 or nx > 7 or ny > 8:
continue
if nx == s_pos[0] and ny == s_pos[1]:
px = s_pos[0] + dx[idx]
py = s_pos[1] + dy[idx]
if px < 0 or py < 1 or px > 7 or py > 8:
continue
# 현재 좌표를 갱신
s_pos[0] = px
s_pos[1] = py
k_pos[0] = nx
k_pos[1] = ny
k_result = alpha[k_pos[0]] + str(k_pos[1])
s_result = alpha[s_pos[0]] + str(s_pos[1])
print(k_result)
print(s_result)
'문제풀이' 카테고리의 다른 글
프로그래머스 메뉴 리뉴얼 (0) | 2021.10.01 |
---|---|
[python] 백준 1138번 (0) | 2021.03.03 |
[python] 백준 1051번 (0) | 2021.03.02 |
Comments