이코테

[이코테 - 구현] 왕실의 나이트

종식당 2024. 2. 5. 20:11
728x90
반응형

 

  • 문제 설명

문제는 크게 어렵지 않다. 8x8 좌표평면을 체스판이라고 생각하고 출발 지점이 입력으로 들어오면 그 지점부터 체스판에서 나이트가 움직일 수 있는 경우의 수를 출력하면 된다.

 

 

1번과 2번을 나누어서 생각한 경우의 수는 위와 같다. 저렇게 총 8가지의 경우의 수가 존재한다. 이제 시작 지점에서 칸 밖을 안 나가는 지만 생각해 주면 된다.

 

  • 문제 코드
N = input()
row = int(N[1])
column = int(ord(N[0])) - ord('a') + 1

steps = [(1,2),(-1,2),(1,-2),(-1,-2),(2,1),(2,-1),(-2,1),(-2,-1)]

result = 0
for step in steps:
    new_row = row + step[0]
    new_column = column + step[1]

    if new_row >= 1 and new_column >= 1 and new_row <= 8 and new_column <= 8:
        result+=1

print(result)

 

문제에서 시작 지점을 입력 받는다. 만약 a1을 입력으로 받았다면 1이 행이고 a가 열이다. 행은 입력받은 문자의 두 번째 글자를 숫자 취급하면 된다. 열을 나타낼 때는 조금 복잡하다. 일단 입력된 문자의 첫 번째 문자를 가지고 생각할 거다.

a가 입력으로 들어오면 첫 번째 열, b가 입력으로 들어오면 두 번째 열이라고 생각할 것이기 때문에 이를 숫자로 변환해야 한다. 우리는 이때 ord()와 chr()을 알고 있어야 한다. 

 

  • ord() & chr()
print(ord('A'))  # 출력: 65

print(chr(65))  # 출력: 'A'

 

위 함수들은 파이썬에서 아스키코드를 다루기 위해 알고 있어야 한다.

 

 steps 리스트에 위에서 구한 모든 경우의 수를 저장한 다음 for문을 돌려 입력받은 행과 열에 더하면서 새로운 행과 열을 구할 것이다. 그리고 이 지점들이 좌표 평면 밖에 나가지 않는지 확인해 이들의 개수를 세준 후 출력해 주면 된다.

 

728x90
반응형