728x90
왕실의 나이트
1) 문제 해결 아이디어
현재 위치의 행에 대한 알파벳(a~h)를 1~8 로 바꾼다.
나이트의 8가지 경로에 해당하는 위치로 이동가능한지 확인한다.
리스트를 이용해 8가지 방향에 대한 방향 벡터를 정의한다.
2) 소스코드
알파벳으로 입력된 y좌표(a~h)를 1~8 로 변환하는데 오류를 겪었지만 ord()함수를 사용하여 잘 해결하였따. 기준 좌표를 (1, 1)로 하기 위해 1을 추가로 더해주었다.
(풀이1) 방향벡터를 2개 리스트로 구현
now = input()
cnt = 0 # 경우의 수
x = int(now[1]) # x 좌표
y = ord(now[0]) - ord('a') + 1 # y 좌표
# 이동 방향
dx = [1, -1, -1, 1, 2, -2, -2, 2]
dy = [2, 2, -2, -2, 1, 1, -1, -1]
# 8가지 방향으로 이동가능한지 체크
for i in range(8):
nx = x + dx[i]
ny = y + dy[i]
# 정상범위 내이면
if(1 <= nx <= 8 and 1 < ny <= 8):
cnt += 1
print(cnt)
(풀이2) 방향벡터를 1개 리스트로 구현
now = input()
cnt = 0 # 경우의 수
x = int(now[1]) # x 좌표
y = ord(now[0]) - ord('a') + 1 # y 좌표
# 이동 방향
directions = [(1, 2), (1, -2), (-1, 2), (-1, -2), (2, 1), (2, -1), (-2, 1), (-2, -1)]
# 8가지 방향으로 이동가능한지 체크
for dir in directions:
nx = x + dir[0]
ny = y + dir[1]
# 정상범위 내이면
if(1 <= nx <= 8 and 1 < ny <= 8):
cnt += 1
print(cnt)
728x90
'[Python]알고리즘 > 이코테 2021' 카테고리의 다른 글
[구현] 문제5 - 게임 개발 (0) | 2022.03.19 |
---|---|
[구현] ▲ 문제4 - 문자열 재정렬 (0) | 2022.03.18 |
[구현] 문제2 - 시각 (0) | 2022.03.18 |
[구현] 문제1 - 상하좌우 (0) | 2022.03.18 |
[그리디 알고리즘] 숫자 카드 게임 (0) | 2022.03.18 |