구현
머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정
완전 탐색 - 모든 경우의 수를 주저 없이 다 계산하는 해결 방법
시뮬레이션 - 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행
8 X 8 좌표 평면에서 나이트는 다음과 같은 2가지 경우로 이동할 수 있다.
1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기
2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기
나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램ㅇ을 작성하시오. 이 때 왕실의 정원에서 행 위치를 표현할 때는 1부터 8로 표현하면, 열 위치를 표현할 때는 a부터 h로 표현한다.
a1
2
input_data = input()
row = int(input_data[1])
# 문자를 숫자로 변경해서 사용
column = int(ord(input_data[0]) - ord('a')) + 1
# 튜플 ( ), 이동할 수 있는 모든 경우
steps = [(2, 1), (2, -1), (-2, 1), (-2, -1), (1, 2), (1, -2), (-1, 2), (-1, -2)]
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)
문자를 한 칸씩 증가시키는 것보다 숫자를 증가시키는 것이 편하기 때문에 문자를 숫자로 바꿔서 사용한다.
이동할 수 있는 경우를 미리 저장해 놓고 경우를 하나씩 보면서 이동할 수 있는 지 확인한다.
구현 문제가 너무 어렵다.. 상하좌우 문제도 그렇게 실행할 수 있는 모든 경우의 수를 저장해 놓고 하나씩 확인하면서 사용하는 방법을 기억해 놔야 겠다. 그리고 그 경우를 튜플로 사용해서 저장해 놓는 것이 좋다.