본문 바로가기
Programming Test/코테 대비 과정

[알고리즘 공부] 왕실의 나이트

by muns91 2024. 3. 22.
왕실의 나이트

 

유형 : 구현

출처 : 이것이 취업을 위한 코딩 테스트다. with Python

프로그램 언어 : Python

난이도 : ★

 

문제 & 규칙

 행복 왕국의 왕실 정원은 체스판과 같은 8x8 좌표 평면이다. 왕실 정원의 특정한 한 칸에 나이트가 서 있다. 나이트는 매우 충성스러운 신하로서 매일 무술을 연마한다.

 

 나이트는 말을 타고 있기 때문에 이동을 할 때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없다. 나이트는 특정한 위치에서 다음과 같은 2가지 경우로 이동할 수 있다. 

 

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

 

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

 

나이트가 이동할 수 있는 경우 (a1 위치)

 

  • 오른쪽으로 두 칸 이동 후 아래로 한 칸 이동하기 (c2)
  • 아래로 두 칸 이동 후 오른쪽으로 한 칸 이동하기 (b3)

 

조 건

  • 첫째 줄에 8x8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내느 두 문자로 구성된 문자열이 입력된다. 입력 문자는 a1처럼 열과 행으로 이뤄진다.
  • 출력 조건 : 첫째 줄에 나이트가 이동할 수 있는 경우의 수를 출력하시오.
입력 조건
a1

출력 조건
2

 

# 사용자로부터 시작 위치를 입력받음 (예: a1)
start_point = input()
# 입력받은 위치의 행 번호를 계산 ('1'에서 '8' 사이의 숫자)
row = int(start_point[1])
# 입력받은 위치의 열 번호를 계산 ('a'에서 'h' 사이의 알파벳을 1에서 8 사이의 숫자로 변환)
colunm = int(ord(start_point[0])) - int(ord('a')) + 1

# 나이트가 이동할 수 있는 8가지 방향 정의
steps = [(-2, -1), (-1, -2), (1,-2), (2, -1), (2, 1), (1, 2), (-1, 2), (-2, -1)]

# 이동 가능한 위치의 수를 저장할 변수 초기화
result = 0

# 가능한 모든 이동 방향에 대해 반복
for step in steps:
    # 다음 위치의 행 계산
    next_row = row + step[0]
    # 다음 위치의 열 계산
    next_column = colunm + step[1]

    # 다음 위치가 체스판 안에 있는지 확인 (1에서 8 사이의 행과 열)
    if next_row >=1 and next_row <= 8 and next_column >=1 and next_column <=8:
        # 체스판 안에 있다면, 이동 가능한 위치의 수 증가
        result += 1

# 최종적으로 계산된 이동 가능한 위치의 수 출력
print(result)

 

 

참 고

2023.12.08 - [IT/관련 정보] - [코딩 테스트] 이것이 취업을 위한 코딩테스트다 with 파이썬

 

[코딩 테스트] 이것이 취업을 위한 코딩테스트다 with 파이썬

코딩 테스트, 어디서부터 그리고 어떻게 준비해야될까? 이제 졸업 혹은 졸업을 앞두신 분들 그리고 개발 관련 취업에 종사하시고 싶은 분들이라면 반드시 놓치지 말아야할 점이 바로 코딩 테스

muns-da2.tistory.com

 

반응형