머쓱이는 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]으로 반환할 배열 answer를 초기화 한 뒤 주어진 정수 배열 board를 통해 경계값을 설정해 주었다.
그리고 for문으로 루프를 돌며, 입력된 방향키가 저장되어 있는 문자열 배열 keyinput의 요소를 꺼내어 확인한다. 이때, 코드의 복잡성을 최소화하기 위해 switch문을 사용했다.
up, down, left, right 총 4개의 case가 있고, 경계값보다 값이 작다면 복합 연산자를 통해 값을 변경해준다. 이때 if문으로 조건 체크 시 중요한 건 down, left와 같이 마이너스 연산이 들어가는 경우 각각의 경계값에 -를 붙여 주어야 한다는 점이다.
입력 방향키에 해당하는 연산을 수행한 뒤에는 switch문을 빠져 나올 수 있도록 break;를 해준다.
class Solution {
public int[] solution(String[] keyinput, int[] board) {
int[] answer = {0, 0};
int maxX = board[0] / 2;
int maxY = board[1] / 2;
for (String key : keyinput) {
switch (key) {
case "up":
if(answer[1] < maxY) answer[1] += 1;
break;
case "down":
if(answer[1] > -maxY) answer[1] -= 1;
break;
case "left":
if(answer[0] > -maxX) answer[0] -= 1;
break;
case "right":
if(answer[0] < maxX) answer[0] += 1;
break;
}
}
return answer;
}
}
