간단한 구현 문제다.
먼저 나이트는 날 일日자(가로 2칸과 세로 1칸 또는 가로 1칸과 세로 2칸)로 움직이는 것을 알아야 풀 수 있다. 문제의 핵심은 글에 있는 세 가지 조건을 체크하는 것이다. 조건은 아래와 같다.
- 시작한 칸과 끝난 칸을 나이트가 이동할 수 있어야 한다.
- 칸에서 칸으로 이동할 때 나이트가 갈 수 있어야 한다.
- 움직인 칸이 중복되지 않아야 한다.
이를 코드로 풀어서 쓰면 된다! 조건이 그렇게 어렵지 않기 때문에 코드 짜는 것이 굉장히 간단하다.
import sys
if __name__ == '__main__':
route = list()
for _ in range(36):
route.append(sys.stdin.readline().rstrip())
if len(set(route)) != 36:
print('Invalid')
exit()
for i in range(36):
diff_row = abs(ord(route[i][0])-ord(route[i-1][0]))
diff_col = abs(int(route[i][1])-int(route[i-1][1]))
if (diff_row == 1 and diff_col == 2) or (diff_row == 2 and diff_col == 1):
continue
else:
print('Invalid')
exit()
print('Valid')
해당 코드는 순서대로 3번, 1~2번 조건을 체크해 준다. 파이썬에서 list 자료구조가 음수로 받아도 되는 것을 응용해서 1번 조건을 체크해 줬고, 다음 칸과의 체크들이 2번 조건을 체크해 주게끔 해준다.
728x90
'Python > 백준 문제 풀이' 카테고리의 다른 글
[BOJ] 2468번 안전영역 (0) | 2023.01.29 |
---|---|
[BOJ] 27162번 Yatch Dice (0) | 2023.01.23 |
[BOJ] 26517번 연속인가? ? (0) | 2023.01.07 |
[BOJ] 26069번 붙임성 좋은 총총이 (0) | 2022.12.31 |
[BOJ] 9549번 암호화된 비밀번호 (0) | 2022.12.03 |
댓글