반응형
https://www.acmicpc.net/problem/1063
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 |