컴공생의 다이어리
왕실의 나이트 본문
행복왕국의 왕실정원은 체스판과 같은 8 * 8좌표 평면이다. 왕실 정원의 특저안 한 칸에 나이트가 서있다. 나이트는 매우 충성스러운 신하로서 매일 무술을 연마한다. 나이트는 말을 타고 있기 때문에 이동을 할때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없다. 나이트는 특정한 위취에서 다음과 같은 2가지 경우로 이동할 수 있다.
- 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기
- 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기
질문
이처럼 8 * 8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하시오.
코드로 구현
아래는 파이썬으로 구현한 코드이다.
cur=input()
row=int(cur[1])
column=int(ord(cur[0]))-int(ord('a'))+1
step=[(-2,-1),(-2,1),(2,-1),(2,1),(-1,-2),(-1,2),(1,-2),(1,2)]
result=0
for s in step:
next_r=row+s[0]
next_c=column+s[1]
if next_r>=1 and next_r<=8 and next_c>=1 and next_c<=8:
result+=1
print(result)
아래는 c/c++으로 구현한 코드이다.
#include<iostream>
#include<string>
int main() {
int result = 0;
int px[] = { -2, -1, 1, 2, 2, 1, -1, -2 };
int py[] = { -1, -2, -2, -1, 1, 2, 2, 1 };
std::string input;
std::cin >> input;
int row = input[1] - '0';
int column = input[0] - 'a' + 1;
for (int i = 0; i < 8; i++) {
int nextRow = row + px[i];
int nextColumn = column + py[i];
if (nextRow >= 1 && nextRow <= 8 && nextColumn >= 1 && nextColumn <= 8)
result += 1;
}
std::cout <<result;
return 0;
}
www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791162243077
728x90
반응형
'Development > Algorithm & Coding Test' 카테고리의 다른 글
완전수, 부족수, 과잉수, 정사각수란? (0) | 2021.03.24 |
---|---|
게임 개발 (0) | 2020.12.21 |
시각 (0) | 2020.12.21 |
상하좌우 (0) | 2020.12.21 |
[프로그래머스] Greedy - 체육복 (0) | 2020.12.18 |
Comments