Notice
Recent Posts
Recent Comments
Link
나의 GitHub Contribution 그래프
Loading data ...
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

Code in Life

[python] 백준 1063번 본문

문제풀이

[python] 백준 1063번

퓨끼 2021. 3. 2. 22:51

문제링크: 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