[Python] 백준 1063 킹 풀이

지민·2022년 8월 25일
1
post-thumbnail
# PROBLEM - 킹
# TIER - S3
# NUMBER - 1063
# DATE - 2022-08-25 17:48
# IDEA -
import sys
input = sys.stdin.readline

king, doll, N = input().split()
N = int(N)
graph = [[0]*8 for _ in range(8)]


def find_idx(piece): # 처음위치 return해주는 함수
    return 8-int(piece[1]), ord(piece[0])-65


def next_idx(x, y, direction): # 그 다음 방향 어디로 갈지 return해주는 함수
    next_direction = { 
        'R': (1, 0),
        'L': (-1, 0),
        'B': (0, 1),
        'T': (0, -1),
        'RT': (1, -1),
        'LT': (-1, -1),
        'RB': (1, 1),
        'LB': (-1, 1),
    }
    x += next_direction[direction][1]
    y += next_direction[direction][0]
    return x, y


king_x, king_y = find_idx(king) # K, D의 처음위치를 뽑아내줌
doll_x, doll_y = find_idx(doll)

graph[king_x][king_y] = 'K'  # 처음 위치에 놓아줌
graph[doll_x][doll_y] = 'D'  # 처음 위치에 놓아줌

for i in range(N):
    direction = input().rstrip()  # 그 다음 방향을 입력받고
    nx, ny = next_idx(king_x, king_y, direction)  # 그 다음 킹이 갈 idx return해줌
    if 0 <= nx < 8 and 0 <= ny < 8:  # idx범위 안에서만 동작
        if graph[nx][ny] == 'D':  # 만약 킹이 갈 자리에 돌이 있다면
            ndx, ndy = next_idx(nx, ny, direction)  # 돌도 킹 진행방향 따라 가주고
            if 0 <= ndx < 8 and 0 <= ndy < 8: # 돌의 다음 위치가 정상적일 경우
                try:
                    graph[ndx][ndy] = 'D'  # 돌, 킹 놓아준 뒤 이미 지나온 부분은 0으로 처리
                    graph[nx][ny] = 'K'
                    graph[king_x][king_y] = 0
                    king_x, king_y = nx, ny  # 그리고 킹의 현재 위치 초기화
                except:
                    continue  # 하지만 idxError 날 경우에는 그냥 포기하고 continue
        else:  # 가는 길에 아무것도 없을 경우
            graph[nx][ny] = 'K'  # 킹을 놔
            graph[king_x][king_y] = 0  # 0처리해
            king_x, king_y = nx, ny  # 초기화쳐


for i in range(8):
    for j in range(8):  # 모든 체스판을 순회하면서
        if graph[i][j] == 'K':  # K, D인 경우에 보드판의 규격에 맞게 저장
            king = (f'{chr(65+j)}{8-i}')
        elif graph[i][j] == 'D':
            doll = (f'{chr(65+j)}{8-i}')

print(king)
print(doll)
profile
남들 개발 공부할 때 일기 쓰는 사람

0개의 댓글