<구현> 왕실의 나이트
행복 왕국의 왕실 정원은 체스판과 같은 8 x 8 좌표 평면입니다. 왕실 정원의 특정한 한 칸에 나이트가 서 있습니다. 나이트는 매우 충성스러운 신하로서 매일 무술을 연마합니다.
나이트는 말을 타고 있기 때문에 이동을 할 때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없습니다.
나이트는 특정 위치에서 다음과 같은 2가지 경우로 이동할 수 있습니다.
- 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기
- 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기
이처럼 8 x 8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하세요. 왕실의 정원에서 행 위치를 표현할 때는 1부터 8로 표현하며, 열 위치를 표현할 때는 a부터 h로 표현합니다.
- c2에 있을 때 이동할 수 있는 경우의 수는 6가지입니다.
My A :
#아이디어 : 이동할 경우의 수를 배열에 담고 이동할 수 있으면 카운트 세기
#처음에 숫자로 하는 것이 마음이 편함. 나중에 col, low에 알맞는 인덱스 대입
def sol(position):
count = 8
#움직이는 패턴. 인덱스는 각각 01, 23, 45 ... ,1415
move = [2,1, 1,2, -1,2, -2,1, 1,-2, -2,1, -2,-1, -1,-2]
row = ['1', '2', '3', '4', '5', '6', '7', '8']
col = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
# x, y로 col, low에 맞는 인덱스 삽입
x = position[:1]
y = position[-1]
for i in col:
if x in col:
x = col.index(x)
for j in row:
if y in row:
y = row.index(y)
# 말이 이동할 수 없는 경우 count 감산 연산
for k in range(0,len(move)-1,2):
nx = x + move[k]
ny = y + move[k+1]
if ny <= -1 or nx <= -1 or nx > 7 or ny > 7:
count -= 1
# 체크 후 nx, ny 초기화
nx = 0
ny = 0
print(count)
return count
sol('h8')
=> 2 출력
Other A :
#현재 나이트의 위치 입력받기
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)
'코딩테스트 연습' 카테고리의 다른 글
[Python] 이코테 2021 DFS/BFS (1) (0) | 2022.03.03 |
---|---|
[Python] 이코테 2021 <구현> 문자열 재정렬 (0) | 2022.02.28 |
[Python] 이코테 2021 <구현> 상하좌우 (0) | 2022.02.24 |
[Python] 이코테 2021 <구현> 시각 (0) | 2022.02.24 |
[Python] 이코테 2021 <그리디> 모험가 길드 (0) | 2022.02.24 |