문제풀이/Implementation

[CodingTest] 왕실의 나이트 ( 구현 )

IT록흐 2023. 5. 26. 12:27
반응형

◎ 문제

 

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

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


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

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

 

- 입력조건

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

 

- 출력조건

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

 

- 입력 예시

a1

- 출력 예시

2

 

 

◎ 문제풀이

 

왕실나이트가 이동가능한 경우의 수를 출력하는 문제이다. 가능한 경우를 검증하는 로직이 중요하다. 

 

수평이동은 a와 h 사이이고

수직이동은 1과 8 사이이다.

 

이동가능여부 검증을 단순화하려면 a~h를 1~8로 바꾸어야 한다. 알파벳은 ord함수를 사용하면 유니코드 숫자가 된다. 입력받은 열을 x라고 한다면 x = ord(x) - ord('a') + 1 로 연산해하면 a~h는 1<= x <= 8로 검증할 수 있다.

 

 

◎ 코드

  
#검증함수
def isvalidate(direct) :
  dx,dy = direct
  if  x+dx >= 1 and x+dx <= 8 and y+dy >= 1 and y+dy <= 8 : return True
  else : False

n = input() 
x, y = ord(n[0]), int(n[1])
x = x - ord('a') + 1 # 검증대상 일원화하기

direction = [[2,1],[2,-1],[-2,1],[-2,-1],[1,2],[-1,2],[-1,-2],[1,-2]] # 이동가능한 경우의 수 (8가지)
result = 0 

for direct in direction :
  if isvalidate(direct) : result += 1

print(result)

 

- 입력 

a1

- 출력 

2

 

 


 

참고자료

 

이것이 취업을 위한 코딩 테스트다 with 파이썬 : 네이버 도서

네이버 도서 상세정보를 제공합니다.

search.shopping.naver.com

 

반응형