[이코테] 왕실의 나이트(그리디&구현).py
▶ 문제
: 왕실의 체스판은 8 X 8 좌표 평면입니다. 왕실 정원의 특정한 한 칸에 나이트가 서있다.
나이트는 이동 시 L자 형태로만 이동할 수 있으며, 정원 밖으로는 나갈 수 없다.
<2가지 이동 경우>
→ 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기
→ 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기
나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하시오.
행 위치를 표현할 때는 1부터 8로 표현하며, 열 위치는 a부터 h까지 표현한다.
▶ 입력 예시
: c2
▶ 출력 예시
: 6
Code
# 현재 나이트의 위치 입력받기
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)
▶ 배운점
: 먼저 나이트가 이동할 수 있는 경우의 수 8가지를 정해주는 것이 핵심이다.
특히, 현재 나이트의 위치를 입력 받을 때, ord 함수를 쓰는데, 아스키 값으로 바꿔주는 함수이다.
예로) ord('1') 은 49 이고, ord('A') 는 65 이다.
입력 예시가 c2이므로, c의 아스키 값에다가 a 아스키 값을 빼준다.
그럼 2가 되는데 c는 3번째이므로 +1 해줘서 맞춰준다.
이것도 마찬가지로 완전탐색으로 이동하는 모든 경우의 수를 돌리고,
if 문으로 정원 범위 내에 있을 때만 result값을 카운트해줘서 출력한다.
여기서 벡터의 개념이 중요한데, row는 x, column은 y 개념으로 인지해야한다.
ord('c')
출처:
https://www.youtube.com/watch?v=2zjoKjt97vQ&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=2