무난한 수준의 시뮬레이션 문제였다.
- King의 위치와 Stone의 위치를 입력받은 정보대로 움직이며 최종 위치를 출력한다.
- 이동 정보는 파이썬 Dictionary 자료구조를 활용해 이동할 곳을 Masking해주었다.
- Input 받을 때 좌표를 다루기 쉬운 숫자 형태로 변환하는 것과 이동 처리 후 Output할 때 다시 문자 형태로 변환하는 것이 꽤 까다로웠다.
- 이 때, 파이썬의 ord() 함수와, chr() 함수를 사용해 변환해주었다.
- 이동할 때, King과 Stone 모두 격자 밖으로 나가면 무효로 쳐야한다.
- 특히, Stone이 격자 밖으로 나가면 King의 움직임 역시 이전 상태로 되돌리는(무효) 처리를 해줘야 pass를 받을 수 있다.
파이썬 코드는 다음과 같다.
import sys
input = sys.stdin.readline
info = {
"R": (0, 1),
"L": (0, -1),
"B": (1, 0),
"T": (-1, 0),
"RT": (-1, 1),
"LT": (-1, -1),
"RB": (1, 1),
"LB": (1, -1)
}
king, stone, n = input().split()
kr, kc = 8-int(king[1]), ord(king[0])-ord("A")
sr, sc = 8-int(stone[1]), ord(stone[0])-ord("A")
for _ in range(int(n)):
cmd = input().strip()
dr, dc = info[cmd]
if not (0 <= kr+dr < 8 and 0 <= kc+dc < 8):
continue
kr += dr
kc += dc
if (kr, kc) == (sr, sc):
if not (0 <= sr+dr < 8 and 0 <= sc+dc < 8):
# 킹의 움직임 되돌리기
kr -= dr
kc -= dc
continue
sr += dr
sc += dc
print(chr(ord("A")+kc)+str(8-kr))
print(chr(ord("A")+sc)+str(8-sr))
시간 : 128ms / 메모리 : 121220KB
고찰 : 어렵지 않은 시뮬레이션 문제이나 상세 조건을 잘 읽어서 처리하는 것이 꽤 까다로웠다. 재밌는 문제였다.
'Problem Solving > boj' 카테고리의 다른 글
[BOJ] 3987. 보이저 1호(Python) / Simulation (0) | 2021.03.11 |
---|---|
[BOJ] 8911. 거북이(Python) / Simulation (0) | 2021.03.09 |
[BOJ] 9466. 텀 프로젝트(Python) / DFS (0) | 2021.03.09 |
[BOJ] 2023. 신기한 소수(Python) / DFS (0) | 2021.03.08 |
[BOJ] 2661. 좋은 수열(Python) / Backtracking (0) | 2021.03.07 |