본문 바로가기
공부/이것이 코딩테스트다

구현 - 왕실의 나이트

by 박영귤 2023. 1. 3.

< 왕실의 나이트 > 

난이도 : 하

[문제]

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

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

이처럼 8 × 8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는
프로그램을 작성하라. 왕실의 정원에서 행 위치를 표현할 때는 1부터 8로 표현하며, 열 위치를 표현할 때는
a 부터 h로 표현한다

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

[입력 조건]

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

[출력 조건]

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

[입력 예시]                                                                        [출력 예시]

a1                                                                                           2


영규's 아이디어

  • 말이 이동할 수 있는 위치 변화량을 저장해두고, 그만큼 변했을 때도 체스 보드 안에 있는 경우만 카운트 해준다.

영규's 코드

loc = input()
# 입력 받은 loc을 정수형 변수로 바꾸는 부분이다. 0 ~ 7로 표현하였다.
row = int(loc[1]) - 1
col = ord(loc[0]) - 97 # ord는 입력된 문자의 ASCII코드를 반환해주는 함수이다.
# 나이트가 이동하는 칸의 크기를 리스트에 담았다.
d_row = [1, 1, -1, -1, 2, 2, -2, -2]
d_col = [2, -2, 2, -2, 1, -1, 1, -1]
cnt = 0
for i in range(8):
    # 이동 한 위치가 체스 보드 안에 위치할 때만 카운트 해준다.
    if 0 <= row + d_row[i] < 8 and 0 <= col + d_col[i] < 8:
        cnt += 1
print(cnt)

아무래도 입력을 정수로 바꾸는 부분이 제일 어렵지 않을까 하는 생각이 있다. ord같은 내장 함수를 많이 알고 있으면 코딩테스트에 크게 도움이 될 것 같다.

'공부 > 이것이 코딩테스트다' 카테고리의 다른 글

알고리즘을 배우는 이유 및 커리큘럼  (0) 2023.01.03
구현 - 게임 개발  (0) 2023.01.03
구현 이론  (0) 2023.01.03
재귀함수 이론  (0) 2023.01.03
스택과 큐 자료구조 이론  (0) 2023.01.03