머쓱이는 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]까지 이동할 수 있습니다.
class Solution {
public int[] solution(String[] keyinput, int[] board) {
int[] answer = new int[2];
//일단 보드 기준은 마지막에 계산하고
// 키입력에 따라서 리절트 값 먼저 구하고
// 마지막에 보드에 벗어 났는지 체크하고 구해주면 될듯
answer[0]=0;
answer[1]=0;
for(int i=0; i< keyinput.length;i++){
if(keyinput[i].equals("left")){
answer[0]-=1;
}else if(keyinput[i].equals("right")){
answer[0]+=1;
}else if(keyinput[i].equals("up")){
answer[1]+=1;
}else if(keyinput[i].equals("down")){
answer[1]-=1;
}
if(answer[0]>board[0]/2){
answer[0]=board[0]/2;
}else if(answer[0]<board[0]/2*(-1)){
answer[0]=board[0]/2*(-1);
}
if(answer[1]>board[1]/2){
answer[1]=board[1]/2;
}else if(answer[1]<board[1]/2*(-1)){
answer[1]=board[1]/2*(-1);
}
}
return answer;
}
}
일단 케이스 한개만 안돼서 질문하기에서 힌트를 얻었다. 처음에 내가 풀었던 방식 잘못됐었다.
원래 for 문을 다 마치고 그다음에 범위에서 벗어났는지 를 검사해줬는데
사실 그러면 안됐다. for 문을 돌리면서 캐릭터는 범위에서 애초에 벗어나지 않았어야 했다.
그래서 그 범위 검사 코드를 for 문 마지막 에 넣어서 캐릭터가 움직일때마다 범위를 벗어나지는 않았는지
검사해줬다. !!!
'자바 알고리즘 문제' 카테고리의 다른 글
| 로그인 성공? (0) | 2024.03.25 |
|---|---|
| 직사각형 넓이 구하기 (1) | 2024.03.25 |
| 외계어 사전 (2) | 2024.03.22 |
| 문자열 겹쳐쓰기 (0) | 2024.03.21 |
| 그림 확대 (0) | 2024.03.19 |