-
[구현] 왕실의 나이트알고리즘/이코테 - 실전 2021. 7. 15. 18:22
난이도 : 하 풀이시간 : 20분 시간제한 : 1초
[ 구현 ] 왕실의 나이트
행복 왕국의 왕실 정원은 체스판과 같은 8 × 8 좌표 평면이다. 왕실 정원의 특정한 한 칸에 나이트가 서있다.
나이트는 매우 충성스러운 신하로서 매일 무술을 연마한다
나이트는 말을 타고 있기 때문에 이동을 할 때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없다
나이트는 특정 위치에서 다음과 같은 2가지 경우로 이동할 수 있다- 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기
- 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기
이처럼 8 × 8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는
프로그램을 작성하라. 왕실의 정원에서 행 위치를 표현할 때는 1부터 8로 표현하며, 열 위치를 표현할 때는
a 부터 h로 표현한다- c2에 있을 때 이동할 수 있는 경우의 수는 6가지이다
- a1에 있을 때 이동할 수 있는 경우의 수는 2가지이다
:: 입력 조건
첫째 줄에 8x8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자열이 입력된다. 입력 문자는 a1 처럼 열과 행으로 이뤄진다.
예시 )
a1
:: 출력 조건
첫째 줄에 나이트가 이동할 수 있는 경우의 수를 출력하시오.
예시 )
2
내 코드
#include <stdio.h> #include <iostream> #include <string> #include <vector> #include<stack> #include <algorithm> using namespace std; int main() { int dir_x[8] = { 2, 2, -2, -2, 1, 1, -1, -1 }; int dir_y[8] = { 1, -1, 1, -1, 2, -2, 2, -2 }; string pos; int cnt = 0; cin >> pos; char a=pos[0], b=pos[1]; for (int i = 0; i < 8; i++) { int pos_x = (int)a - 96 + dir_x[i]; int pos_y = (b - '0') + dir_y[i]; if (1 <= pos_x && pos_x <= 8 && 1 <= pos_y && pos_y <= 8 ) { cnt++; } } printf("%d\n", cnt); }
정답 코드
#include <bits/stdc++.h> using namespace std; string inputData; // 나이트가 이동할 수 있는 8가지 방향 정의 int dx[] = {-2, -1, 1, 2, 2, 1, -1, -2}; int dy[] = {-1, -2, -2, -1, 1, 2, 2, 1}; int main(void) { // 현재 나이트의 위치 입력받기 cin >> inputData; int row = inputData[1] - '0'; int column = inputData[0] - 'a' + 1; // 8가지 방향에 대하여 각 위치로 이동이 가능한지 확인 int result = 0; for (int i = 0; i < 8; i++) { // 이동하고자 하는 위치 확인 int nextRow = row + dx[i]; int nextColumn = column + dy[i]; // 해당 위치로 이동이 가능하다면 카운트 증가 if (nextRow >= 1 && nextRow <= 8 && nextColumn >= 1 && nextColumn <= 8) { result += 1; } } cout << result << '\n'; return 0; }
리뷰
새로운 포지션을 계산하는 부분에서
정답코드랑 조금 달랐다
아직 문자열 -> 정수 , 정수 -> 문자열이 익숙하지 않은 듯
그 부분 빼고는 아이디어도 정답 코드랑 같앗음 !
int row = inputData[1] - '0'; int column = inputData[0] - 'a' + 1;
'알고리즘 > 이코테 - 실전' 카테고리의 다른 글
[ 정렬 ] 성적이 낮은 순서로 학생 출력하기 (0) 2021.08.10 [ 정렬 ] 위에서 아래로 (0) 2021.08.10 [ DFS | BFS ] 미로 탈출 (0) 2021.07.28 [ DFS | BFS ] 음료수 얼려 먹기 (0) 2021.07.28 [구현] 게임 개발 (0) 2021.07.19