구현 - 왕실의 나이트

dobyming·2022년 12월 28일
0

문제

행복 왕국의 왕실 정원은 체스판과 같은 8 × 8 좌표 평면이다. 왕실 정원의 특정한 한 칸에 나이트가 서있다.나이트는 매우 충성스러운 신하로서 매일 무술을 연마한다나이트는 말을 타고 있기 때문에 이동을 할 때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없다나이트는 특정 위치에서 다음과 같은 2가지 경우로 이동할 수 있다

  1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기
  2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기

https://velog.velcdn.com/images%2Fsuzieep%2Fpost%2Fc01d7972-7c64-400b-a07c-664bb10ebc88%2Fimage.png

이처럼 8 × 8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는

프로그램을 작성하라. 왕실의 정원에서 행 위치를 표현할 때는 1부터 8로 표현하며, 열 위치를 표현할 때는

a 부터 h로 표현한다

  • c2에 있을 때 이동할 수 있는 경우의 수는 6가지이다
  • a1에 있을 때 이동할 수 있는 경우의 수는 2가지이다

입력

첫째 줄에 8x8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자열이 입력된다. 입력 문자는 a1 처럼 열과 행으로 이뤄진다.

출력

첫째 줄에 나이트가 이동할 수 있는 경우의 수를 출력하시오.

입력 예시
a1

출력 예시
2


내 코드

knight_dir = input() 
col_dict = { 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8 }
row = int(knight_dir[1])
column = col_dict[knight_dir[0]]
cnt = 0

dr = [-1,1,-1,1,-2,2,-2,2]
dc = [2,2,-2,-2,1,1,-1,-1]

for i in range(8):
    nr = row + dr[i]
    nc = column + dc[i]
    if nr>=1 and nr<=8 and nc>=1 and nc<=8:
        cnt += 1
print(cnt)

해당 조건에서만 나이트를 움직일 수 있는 시뮬레이션 문제이다.

수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기
수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기

이런 2차원 배열에 대한 구현 문제가 주어졌을땐 이런 process가 머리에 그려져야 한다.

1) 기준 2차원 좌표 dx dy 에 대한 경우의 수
(ex. 상하좌우 움직인다. 또는 위 문제처럼 움직일 수 있는 조건이 주어졌을때, 그 속에서 최대한 움직일 수 있는 경우의 수를 고려)
2) 현재 좌표 상태값을 체크
3) 반복문을 돌릴 시, N차원 배열인지 확인 (N의 range까지만 반복문 수행)
4) 좌표값을 update할때 최종 조건들을 확인

0개의 댓글