본문 바로가기
Problem Solving/BOJ

[BOJ][Python]1063 풀이

by NoiB 2023. 7. 2.
반응형

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

 

1063번: 킹

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

www.acmicpc.net

def f(k, s, o):
    if k[0]+ob[o][0] == s[0] and k[1]+ob[o][1] == s[1]:
        if 0 <= s[0]+ob[o][0] <= 7 and 1 <= s[1]+ob[o][1] <= 8:
            s[0] += ob[o][0]
            k[0] += ob[o][0]
            s[1] += ob[o][1]
            k[1] += ob[o][1]
        else:
            return
    else:
        if 0 <= k[0]+ob[o][0] <= 7 and 1 <= k[1]+ob[o][1] <= 8:
            k[0] += ob[o][0]
            k[1] += ob[o][1]
        else:
            return

x = 'ABCDEFGH'
ob = {'R': (1, 0),
      'L': (-1, 0),
      'B': (0, -1),
      'T': (0, 1),
      'RT': (1, 1),
      'LT': (-1, 1),
      'RB': (1, -1),
      'LB': (-1, -1)}
k, s, n = input().split()
k, s = list(k), list(s)
k[0], k[1], s[0], s[1] = x.index(k[0]), int(k[1]), x.index(s[0]), int(s[1])
for _ in range(int(n)):
    o = input()
    f(k, s, o)
print(f'{x[k[0]]}{k[1]}')
print(f'{x[s[0]]}{s[1]}')

좀 더 효율적으로 바꿀 수 있을 것 같은데 마땅히 떠오르는 생각이 없네요. 제가 푼 방법은 그냥 문제에서 시키는 대로 한 것 뿐이라 약간 아쉽습니다.

 

크게 설명드릴 부분이라면 f안의 조건문일 것 같은데 명령에 따른 행동을 미리 테이블화 해두고 킹을 이동시켰을 때 돌과 좌표가 겹치는지 판단하고 겹친다면 돌이 이동했을 때 보드를 넘어가지 않는지 판단, 안겹친다면 킹을 이동했을 때 보드를 넘어가지 않는지 판단하는 것입니다. 정말 하라는 그대로 구현한 것이라 크게 설명드릴 부분은 없어보이네요. 가장 빠른 시간에 해결한 분의 코드를 봐도 개념적으로 크게 다르진 않았습니다.

반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ][Python]1166 풀이  (2) 2023.07.04
[BOJ][Python]1072 풀이  (0) 2023.07.03
[BOJ][Python]1021 풀이  (0) 2023.07.01
[BOJ][Python]1004 풀이  (0) 2023.06.29