728x90
📢 '이것이 코딩 테스트다 with 파이썬' 책을 공부하고 복습하기 위해 작성했습니다.
문제
8 X 8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하라
이때 왕실의 정원에서 행 위치를 표현할 때는 1부터 8로 표현하며, 열 위치를 표현할 때는 a부터 h로 표현한다.
나이트는 특정한 위치에서 2가지 경우로 이동할 수 있다.
- 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기
- 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기
나이트는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없다.
입력 조건
- 첫째 줄에 8x8 좌표 평면 상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자열이 입력된다.
입력 문자는a1
처럼 열과 행으로 이뤄진다.
출력 조건
- 첫째 줄에 나이트가 이동할 수 있는 경우의 수를 출력한다.
입력 예시
a1
출력 예시
2
나의 풀이
n = input()
# 좌표는 8 x 8 (1 ~ 8, a ~ h)
l = ["a", "b", "c", "d", "e", "f", "g", "h"]
c = ["1", "2", "3", "4", "5", "6", "7", "8"]
# 나이트의 좌표
ni = c.index(n[1])
nj = l.index(n[0])
# 이동할 수 있는 경우
dxy = [(-2, 1), (-2, -1), (2, 1), (2, -1),
(1, -2), (-1, -2), (1, 2), (-1, 2)]
cnt = 0
for dx, dy in dxy:
nx = ni + dx
ny = nj + dy
# 좌표를 벗어나지 않으면,
if 0 <= nx <= 7 and 0 <= ny <= 7:
cnt += 1
print(cnt)
해설
나이트가 이동할 수 있는 경로를 하나씩 확인해 이동한다.
8 x 8 좌표 평면을 벗어나는지 검사 후 결과를 출력한다.
728x90
'Algorithm' 카테고리의 다른 글
[이코테] 04. DFS / BFS - 자료구조 기초 (0) | 2024.01.02 |
---|---|
[이코테] 03-2 구현 - 게임 개발 (1) | 2023.12.17 |
[이코테] 03. 구현(Implementation) (1) | 2023.12.16 |
[이코테] 02-3. 그리디 알고리즘 - 1이 될 때까지 (1) | 2023.12.09 |