[문제]
행복 왕국의 왕실 정원은 체스판과 같은 8 x 8 좌표 평면이다. 왕실 정원의 특정한 한 칸에 나이트가 서 있다.
나이트는 매우 충성스러운 신하로서 매일 무술을 연마한다.
나이트는 말을 타고 있기 때문에 이동을 할 때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없다.
나이트는 특정한 위치에서 다음과 같은 2가지 경우로 이동할 수 있다.
1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기
2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기
이처럼 8 x 8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을
작성하시오. 이때 왕실의 정원에서 행 위치를 표현할 때는 1부터 8로 표현하며, 열 위치를 표현할 때는 a부터 h로 표현한다.
...
... 생략
...
[입력 조건]
1. 첫째 줄에 8 x 8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자열이 입력된다.
입력 문자는 a1처럼 열과 행으로 이뤄진다.
[출력 조건]
첫째 줄에 나이트가 이동할 수 있는 경우의 수를 출력하시오.
<입력 예시>
a1
<출력 예시>
2
[내 풀이]
n = input()
al = int(ord(n[0])) - int(ord('a')) + 1
number = int(n[1])
result = 0
move = [(-1,2), (1,2), (-2, -1), (-2, 1), (-1,-2), (1, -2), (-1,2), (1, 2)]
for i in move :
result_row = number + i[0]
result_column = al + i[1]
if result_row < 1 or result_column < 1 or result_row > 8 or result_column > 8 :
continue
result += 1
print(result)
현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자열을 입력받는다.
문자열에서 앞 문자는 열에 해당되고 뒷 문자는 행에 해당되는데, 행은 뒷 문자를 정수형으로 형변환하여 number 변수에
할당한다. 열은 앞 문자에 존재하는 알파벳으로 이루어져 있기 때문에 아스키코드 값으로 변환한 후 'a' 값(97)을 빼준 뒤
좌표가 1, 1 로 시작되기 때문에 1을 증가하여 al 변수에 할당해준다.
변수 move는 나이트가 이동할 수 있는 거리를 정의한 것이며, 반복문 내에서는 move에 대하여 각각의 좌표로 이동할 수
있는지 확인한다.
각각의 행(result_row), 열(result_column)에 이동하고자 하는 위치를 할당해주고 행과 열이 좌표에서 벗어나지 않는다면
경우의 수에 해당하는 result 값을 1씩 증가시킨다.
출처
이것이 코딩 테스트다 with 파이썬 - 나동빈 저
'알고리즘 > 이코테 실전문제' 카테고리의 다른 글
[DFS/BFS] 이코테 (파이썬) 미로 탈출 풀이 (0) | 2021.08.24 |
---|---|
[DFS/BFS] 이코테 (파이썬) 음료수 얼려 먹기 풀이 (0) | 2021.08.23 |
[구현] 이코테 (파이썬) 시각 풀이 (0) | 2021.08.18 |
[구현] 이코테 (파이썬) 상하좌우 풀이 (0) | 2021.08.18 |
[그리디] 이코테 (파이썬) 모험가 길드 풀이 (0) | 2021.08.16 |