CS/Coding Test

[ 이것이 취업을 위한 코딩 테스트다 with 파이썬 ] Chapter 04 구현 - 실전 문제: 왕실의 나이트

all-young 2022. 2. 9. 21:06
728x90

왕실의 나이트

 

1 _ 문제

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

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

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

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

예를 들어 만약 나이트가 a1에 있을 때 이동할 수 있는 경우의 수는 다음 2가지이다. a1의 위치는 좌표 평면에서 구석의 위치에 해당하며 나이트는 정원의 밖으로는 나갈 수 없기 때문이다.

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

또 다른 예로 나이트가 c2에 위치해 있다면 나이트가 이동할 수 있는 경우의 수는 6가지이다. 이건 직접 계산해보시오.

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

 


 

2 _ 문제 해결(고민) 과정

행이 1, 2, 7, 8 일 경우, 우선 4방향 중 하나의 수직 방향으로 갈 수 없다는 얘기.
열이 a, b, g, h 일 경우, 4방향 중 하나의 수평 방향으로 갈 수 없다는 얘기다.

모든 표본 공간은 8가지 이다.
위, 아래, 왼쪽, 오른쪽 방향으로 각각 2가지의 경우를 가지고 있다.
위에서 언급한 행 또는 열을 포함하고 있으면, 포함된 개수 만큼 8에서 2씩 빼면 될 것 같다.

 


 

3 _ 문제 알고리즘

1. 입력받은 열과 행을 각각 column 변수와 row 변수에 할당한다.

2. 표본 공간인 count = 8 할당

3. 열과 행에 1, 2, 7, 8 중 하나라도 포함 되면 2씩 빼기

4. count 값 출력

 


 

4 _ MY CODE

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

count = 8

if row == 1 or row == 2 or row == 7 or row == 8:
    count -= 2

if column == 1 or column == 2 or column == 7 or column == 8:
    count -= 2

print(count)
  • 실행 결과

 


 

5 _ 교재 답안 코드

  • 답안
input_data = input()
row = int(input_data[1])
column = int(ord(input_data[0])) - int(ord('a')) + 1

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 = column + step[1]

    if next_row >= 1 and next_row <=8 and next_column >= 1 and next_column <= 8:
        result += 1

print(result)

 


 

6 _ 마치며

특정 행과 열이 포함 되는 경우를 제외 시킬 때

범위로 쓸걸,,,,,,

부등식으로 풀걸,,,,,,,,,,

오 늘 도 하 나 배 웠 다 ~!~!~!~!~~~~

 


 

위 내용은 저자 나동빈의 < 이것이 취업을 위한 코딩 테스트다 with 파이썬 > 을 읽고, 공부한 내용입니다.

https://book.naver.com/bookdb/book_detail.nhn?bid=16439154

 

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

IT 취준생이라면 누구나 입사하고 싶은 카카오ㆍ삼성전자ㆍ네이버ㆍ라인!취업의 성공 열쇠는 알고리즘 인터뷰에 있다!IT 취준생이라면 누구나 가고 싶어 하는 카카오, 라인, 삼성전자의 2016년부

book.naver.com