문제 설명
머쓱이는 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만 주어집니다.
문제풀이
import java.util.*;
class Solution {
public int[] solution(String[] keyInput, int[] board) {
int x = 0;
int y = 0;
int[] answer = new int[2];
int[] dx = {0, 0, -1, 1};
int[] dy = {-1, 1, 0, 0};
String[] moveType = {"down", "up", "left", "right"};
for (int i = 0; i < keyInput.length; i++) {
char plan = keyInput[i].charAt(0);
int nx = -1, ny = -1;
for (int j = 0; j < 4; j++) {
if (plan == moveType[j].charAt(0)) {
nx = x + dx[j];
ny = y + dy[j];
break;
}
}
if (nx < -board[0]/2 || ny < -board[1]/2 || nx > board[0]/2 || ny > board[1]/2) {
continue;
}
x = nx;
y = ny;
}
answer[0] = x;
answer[1] = y;
return answer;
}
}
- 처음 출발 위치 확인
- x좌표 y좌표 시작위치확인하여 LRUD 생성
- 입력받는 배열의 크기 확인
- board의 크기를 벗어나 방향 입력 무시의 크기 범위 확인
'알고리즘 문제 > 프로그래머스' 카테고리의 다른 글
프로그래머스 0 단계 중복된 숫자 개수 - JAVA (0) | 2023.05.12 |
---|---|
프로그래머스 0 단계 7의 개수 - JAVA (0) | 2023.05.12 |
프로그래머스 0단계 문자열 정렬하기 (2) - java (0) | 2023.05.11 |
프로그래머스 0단계 문자열안에 문자열- java (0) | 2023.05.11 |
프로그래머스 0 단계 자릿수 더하기-java (0) | 2023.05.10 |