티스토리 뷰
📌문제
예제 4-3 왕실의 나이트
8 x 8 체스판에 나이트가 서 있다. 나이트는 이동을 할 때 L자 형태로만 이동할 수 있으며 체스판 밖으로는 나갈 수 없다.
1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기
2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기
8 x 8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하시오.
이때 좌표의 행 위치를 표현할 때는 1~8로 표현하고, 열 위치를 표현할 때는 a~h로 표현한다.
📌풀이
나이트의 이동 경로를 steps 변수에 넣는다면
steps=[(-2, -1), (-1, -2), (1, -2), (2, -1), (2, 1), (1, 2), (-1, 2), (-2, 1)]
나이트의 현재 위치가 주어지면 현재 위치에서 이동 경로를 더한 후, 8 x 8 좌표 안에 있는지 확인
📌코드
input_data = input()
row = int(input_data[1])
column = int(ord(input_data[0])) - int(ord("a")) + 1
# 나이트가 이동할 수 있는 8가지 방향 정의
steps = [(-2, -1), (-1, -2), (1, -2), (2, -1), (2, 1), (1, 2), (-1, 2), (-2, 1)]
# 8가지 방향에 대해 각 위치로 이동 가능한지 확인
result = 0
for step in steps:
# 이동하고자 하는 위치 확인
next_row = row + step[0]
next_column = column + step[1]
# 해당 위치로 이동 가능하다면 카운트 증가
if next_row >= 1 and next_row <= 8 and next_column >= 1 and next_column <= 8:
result += 1
print(result)
ord 함수: 하나의 문자를 인자로 받고 해당 문자에 해당하는 유니코드 정수를 반환
ord('a')를 넣으면 정수 97을 반환
📌참고
'코딩테스트' 카테고리의 다른 글
꼭 필요한 자료구조 기초 - 스택, 큐 (10) | 2024.10.08 |
---|---|
게임 개발 (6) | 2024.10.07 |
시각 (2) | 2024.10.05 |
Chapter 4. 구현, 상하좌우 문제 (2) | 2024.10.04 |
숫자 카드 게임, 1이 될 때까지 (4) | 2024.10.02 |