- 문제
- N x N의 보드판이 주어지고, [0,0]에서 출발
- 문자열로 이루어진 이동명령이 주어짐(ex.'RRDLU')
- 보드판을 벗어날 경우 'OUT'리턴 후 종료
- 보드판의 각 위치에는 0 또는 1로 점수가 주어져있음
- 문자열에 주어진 순서대로 이동하고 난 최종 점수를 리턴
- 시도
- 주어진 명령에서 문자열을 하나씩 떼어내어 좌표를 이동한다
- 이동한 좌표가 범위 내인지 체크, 범위 밖이면 바로 'OUT' 리턴 후 종료
- 범위 내라면, 좌표의 점수를 카운터에 갱신
- 문자열을 다 빼서 썼으면 반복문 종료 후 현재 카운터 리턴
- 수도코드
function boardGame(board, operation) {
let cnt = 0;
let N = board.length;
let cur = [0,0];
while (operation.length) {
let pointer = operation[0];
operation = operation.slice(1);
if (pointer === 'U') {
cur[0] = cur[0] - 1;
}
if (pointer === 'D') {
cur[0] = cur[0] + 1;
}
if (pointer === 'L') {
cur[1] = cur[1] - 1;
}
if (pointer === 'R') {
cur[1] = cur[1] + 1;
}
else if (cur[0] < 0 || cur[1] < 0 || cur[0] >= N || cur[1] >= N) {
return 'OUT';
}
cnt = cnt + board[cur[0]][cur[1]];
}
return cnt;
};
- 레퍼런스
function boardGame(board, operation) {
const DIR = {
'U': [-1, 0],
'D': [1, 0],
'L': [0, -1],
'R': [0, 1]
}
const LEN = board.length;
const isValid = (y, x) => 0 <= y && y < LEN && 0 <= x && x < LEN;
let Y = 0;
let X = 0;
let score = 0;
for (let i = 0; i < operation.length; i++) {
const [dY, dX] = DIR[operation[i]];
Y += dY;
X += dX;
if (isValid(Y, X) === false) return 'OUT';
score += board[Y][X];
}
return score;
};