일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Hackerrank
- SQL
- 코딩테스트
- 코플릿
- 코드스테이츠
- Developer_JoyKim
- array.push()
- 개발자의 책장
- for문
- 개발자_조이킴
- 역행자
- JavaScript
- node.js
- 배열
- Where
- MySQL
- 자바스크립트
- array.slice()
- 재귀함수
- 최강의 인생
- 코딩공부
- Programmers
- 알고리즘
- select
- 프로그래머스
- Algorithms
- array
- 블록체인
- 정규표현식
- join
Archives
- Today
- Total
CodingSpace
구현 - 왕실의 나이트 본문
행복 왕국의 왕실 정원은 체스판과 같은 8 x 8 좌표 평면이다.
왕실 정원의 특정한 한 칸에 나이트가 서있다.
나이트는 매우 충성스러운 신하로서 매일 무술을 연마한다.
나이트는 말을 타고 있기 때문에 이동을 할 때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없다.
나이트는 특정한 위치에서 다음과 같은 2가지 경우로 이동할 수 있다.
- 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기
- 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기
이처럼 8 x 8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하시오.
이때 왕실의 정원에서 행 위치를 표현할 때는 1부터 8로 표현하며, 열 위치를 표현할 때는 a부터 h로 표현한다.
입력 조건
- 첫째 줄에 8 x 8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자열이 입력된다. 입력 문자는 a1처럼 열과 행으로 이뤄진다.
출력 조건
- 첫째 줄에 나이트가 이동할 수 있는 경우의 수를 출력하시오.
입력 예시
- start : a1
출력 예시
- 2
My Solution (javascript)
// 현재 위치에서 L자 이동이 가능한지 확인하는 함수
function check(position, move) {
// position [현재 row, 현재 col]
// move [row 방향으로 움직일 칸, col 방향으로 움직일 칸]
if (position[0] + move[0] < 1 || position[0] + move[0] > 8 || position[1] + move[1] < 1 || position[1] + move[1] > 8) {
return false;
} else {
return true;
}
}
function night(start) {
let mapper = {
a: 1,
b: 2,
c: 3,
d: 4,
e: 5,
f: 6,
g: 7,
h: 8
}
let row = start[0];
let col = Number(start[1]);
row = mapper[row]
// 위쪽, 아래쪽, 오른쪽, 왼쪽 방향으로 L자 형태로 갈 수 있는 케이스
let cases = [[-2, 1], [-2, -1], [2, 1], [2, -1], [1, 2], [-1, 2], [1, -2], [-1, -2]];
let count = 0;
// 각 케이스를 순회하면서 L자 형태로 갈 수 있으면 count + 1
for (let move of cases) {
if (check([row, col], move)) count++;
}
// 최종 count 반환
return count;
}
'이것이 취업을 위한 코딩 테스트다 with 파이썬 > Chapter4. 구현' 카테고리의 다른 글
구현 - 시각 (0) | 2023.08.29 |
---|---|
구현 - 상하좌우 (0) | 2023.08.22 |
Comments