Code in Life
[python] 백준 1063번 본문
문제링크: www.acmicpc.net/problem/1063
체스판에는 킹과 돌이 있는데, 킹이 움직이는 곳에 돌이 있다면 돌도 같은 방향으로 움직이는 문제다.
이 문제에서는 좌표가 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