머쓱이는 RPG게임을 하고 있습니다. 게임에는 up, down, left, right 방향키가 있으며 각 키를 누르면 위, 아래, 왼쪽, 오른쪽으로 한 칸씩 이동합니다. 예를 들어 [0,0]에서 up을 누른다면 캐릭터의 좌표는 [0, 1], down을 누른다면 [0, -1], left를 누른다면 [-1, 0], right를 누른다면 [1, 0]입니다. 머쓱이가 입력한 방향키의 배열 keyinput와 맵의 크기 board이 매개변수로 주어집니다. 캐릭터는 항상 [0,0]에서 시작할 때 키 입력이 모두 끝난 뒤에 캐릭터의 좌표 [x, y]를 return하도록 solution 함수를 완성해주세요.
- [0, 0]은 board의 정 중앙에 위치합니다. 예를 들어 board의 가로 크기가 9라면 캐릭터는 왼쪽으로 최대 [-4, 0]까지 오른쪽으로 최대 [4, 0]까지 이동할 수 있습니다.
제한사항
- board은 [가로 크기, 세로 크기] 형태로 주어집니다.
- board의 가로 크기와 세로 크기는 홀수입니다.
- board의 크기를 벗어난 방향키 입력은 무시합니다.
- 0 ≤ keyinput의 길이 ≤ 50
- 1 ≤ board[0] ≤ 99
- 1 ≤ board[1] ≤ 99
- keyinput은 항상 up, down, left, right만 주어집니다.
입출력 예
keyinput | board | result |
["left", "right", "up", "right", "right"] | [11, 11] | [2, 1] |
["down", "down", "down", "down", "down"] | [7, 9] | [0, -4] |
입출력 예 설명
입출력 예 설명 #1
- [0, 0]에서 왼쪽으로 한 칸 오른쪽으로 한 칸 위로 한 칸 오른쪽으로 두 칸 이동한 좌표는 [2, 1]입니다.
입출력 예 설명 #2
- [0, 0]에서 아래로 다섯 칸 이동한 좌표는 [0, -5]이지만 맵의 세로 크기가 9이므로 아래로는 네 칸을 넘어서 이동할 수 없습니다. 따라서 [0, -4]를 return합니다.
function solution(keyinput, board) {
const result = [0, 0];
const row = Math.floor(board[0] / 2);
const column = Math.floor(board[1] / 2);
for (let el of keyinput) {
switch (el) {
case 'left' :
result[0] -= 1;
break;
case 'right' :
result[0] += 1;
break;
case 'up' :
result[1] += 1;
break;
case 'down' :
result[1] -= 1;
break;
}
if (result[0] > row) {
result[0] -= 1;
} else if (result[0] < -row) {
result[0] += 1;
}
if (result[1] > column) {
result[1] -= 1;
} else if (result[1] < -column) {
result[1] += 1;
}
}
return result;
}
기본적으로 0, 0에서 출발함으로 result에 [0, 0]을 설정한다.
borad의 가로와 세로의 한계점을 설정할 변수 row와 column을 만들고, 최대값을 설정해준다.
예시에서 나온것처럼 borad의 가로가 9라면 캐릭터는 가로로 -4에서 4까지 이동이 가능하다.
즉 borad[n]을 2로 나누고, 그 값을 내림처리 하면 된다.
keyinput의 개수만큼 코드를 실행해야하므로 for of 문을 사용했다.
switch case 문을 통해 값이 각각 left, right, up, down일때 각 자리에 맞게 값을 증감하도록 했다.
하지만 최대값과 최소값을 벗어날 경우 동작하지 않아야 함으로 조건문을 작성했다.
동작하면서 최대값 또는 최소값에 도달하더라도 다음에 오는 값이 반대되는 값이면 코드가 동작해야함으로 continue문을 썼던 것을 수정했다.
https://school.programmers.co.kr/learn/courses/30/lessons/120861
'study > Algorithm' 카테고리의 다른 글
[프로그래머스] 직사각형 넓이 구하기 (0) | 2023.03.13 |
---|---|
[프로그래머스] 종이 자르기 (0) | 2023.03.12 |
[프로그래머스] 외계어 사전 (0) | 2023.03.07 |
[프로그래머스] 삼각형의 완성조건(2) (0) | 2023.03.07 |
[Algorithm] balancedBrackets (0) | 2023.03.07 |