AI 공부 도전기

[Baekjoon] 1063번 : 킹 (Python, 구현, 시뮬레이션)

 

     

 

https://www.acmicpc.net/problem/1063

 

1063번: 킹

8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는

www.acmicpc.net

 

코드 링크

https://github.com/stellaluminary/Baekjoon

 

GitHub - stellaluminary/Baekjoon

Contribute to stellaluminary/Baekjoon development by creating an account on GitHub.

github.com

 

Python

 

방법 1 - 메모리 30840KB / 시간 72ms / 코드 길이 874B

 

문자열에 따른 변환이 여러번 이뤄지는 문제이다.

변환과 역변환을 잘 조율할 수 있도록 세심한 주의가 필요하다.

 

팁을 주자면

행과 열에 대한 순서, 그리고 움직임에 따른 움직인 정도를 잘 파악해야 한다.

조건문 역시 주어진 내용을 수행할 수 있도록 해야한다.

 

k, r, n = input().split()
moves = [input() for i in range(int(n))]

m = {'R':[0,1], 'L':[0,-1], 'B':[-1,0], 'T':[1,0],
     'RT':[1,1], 'LT':[1,-1], 'RB':[-1,1], 'LB':[-1,-1]}

alpha = {chr(i):ord(chr(i))-ord('A') for i in range(65, 73)}
rev_alpha = {i:chr(i+65) for i in range(8)}
kx, ky = int(k[1])-1, alpha[k[0]]
rx, ry = int(r[1])-1, alpha[r[0]]

maps = [[0]*8 for _ in range(8)]

for i in range(len(moves)):
    move = m[moves[i]]
    nkx, nky = kx + move[0], ky + move[1]
    if nkx < 0 or nky < 0 or nkx >= 8 or nky >= 8:
        continue

    if nkx == rx and nky == ry:
        nrx, nry = rx + move[0], ry + move[1]

        if nrx < 0 or nry < 0 or nrx >= 8 or nry >= 8:
            continue
        else:
            kx, ky = nkx, nky
            rx, ry = nrx, nry
    else:
        kx, ky = nkx, nky

print(rev_alpha[ky]+str(kx+1))
print(rev_alpha[ry]+str(rx+1))

 

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading