- 입출력 예
keyinput | board | result |
["left", "right", "up", "right", "right"] | [11, 11] | [2, 1] |
["down", "down", "down", "down", "down"] | [7, 9] | [0, -4] |
- 입출력 예 설명
1. 입출력 예 설명 #1
[0, 0]에서 왼쪽으로 한 칸 오른쪽으로 한 칸 위로 한 칸 오른쪽으로 두 칸 이동한 좌표는 [2, 1]입니다.
2. 입출력 예 설명 #2
[0, 0]에서 아래로 다섯 칸 이동한 좌표는 [0, -5]이지만 맵의 세로 크기가 9이므로 아래로는 네 칸을 넘어서 이동할 수 없습니다. 따라서 [0, -4]를 return합니다.
- 내 풀이
class Solution {
public int[] solution(String[] keyinput, int[] board) {
int[] answer = {};
// "left", "left", "left", "right" 는 -1 , -1 , -1 , +1 이로 보자면 -2가 맞지만
// board가 3 ,3 일때 상하좌우가 1칸씩 밖에 되지 않기 때문에 -로 계속 가든 +1 로 가든 그자리에서만 있어야 한다
// 그 상태로 +1 혹은 -1 이 들어오면 0 , 0 이 된다
int[] half = {(board[0] -1) / 2 ,(board[1] -1) / 2};
answer = new int[]{0,0};
for (int i = 0; i < keyinput.length; i++) {
if ("left".equals(keyinput[i]) && answer[0] > -half[0]){
answer[0]--;
} else if ("right".equals(keyinput[i]) && answer[0] < half[0]) {
answer[0]++;
} else if ("up".equals(keyinput[i]) && answer[1] < half[1]) {
answer[1]++;
} else if ("down".equals(keyinput[i]) && answer[1] > -half[1]) {
answer[1]--;
}
}
return answer;
}
}
주석으로도 적어 놓았지만 board의 배열 길이를 먼저 생각해야 한다
예로 keyinput 에 "reft" "reft" "reft" "reft" "reft" 5번을 입력하면 캐릭터는 왼쪽으로 -5 칸을 간게 맞지만
board의 길이가 7 , 7 이라고 가정할때
3 | ||
-3 | 0 | 3 |
-3 |
왼쪽 길이는 -3으로 -3 이상 갈수가 없다
그 말은 "reft" "reft" "reft" "reft" "reft" 5번 입력하였을때 -3에서 제자리 걸음을 하고 있다는 뜻이다 이상태로 "right" 을 누룬다면 "reft" "reft" "reft" "reft" "reft" 5번 입력한 -5가 아닌 -3에서 +1을 하여 -2가 된다 주의해야한다.
- 다른 사람 풀이
class Solution {
public int[] solution(String[] keyinput, int[] board) {
int[] now = {0, 0};
for (int i = 0; i < keyinput.length; i++){
if(keyinput[i].equals("left")) now[0] -= now[0]>-(board[0]/2)?1:0;
else if(keyinput[i].equals("right")) now[0] += now[0]<(board[0]/2)?1:0;
else if(keyinput[i].equals("down")) now[1] -= now[1]>-(board[1]/2)?1:0;
else if(keyinput[i].equals("up")) now[1] += now[1]<(board[1]/2)?1:0;
}
return now;
}
}
문제를 풀고 나면 대부분 비슷비슷한 풀이형태를 띄게 되는데 이번에 풀이는 너무나 달라서 직접 보기를 추천한다.
'프로그래머스 > [프로그래머스 - JAVA] Lv.0' 카테고리의 다른 글
[프로그래머스 - JAVA] 직사각형 넓이 구하기 (0) | 2023.03.15 |
---|---|
[프로그래머스 - JAVA] 종이 자르기 (0) | 2023.03.15 |
[프로그래머스 - JAVA] 외계어 사전 (0) | 2023.03.15 |
[프로그래머스 - JAVA] 삼각형의 완성조건 (2) (0) | 2023.03.15 |
[프로그래머스 - JAVA] 구술을 나누는 경우의 수 (0) | 2023.03.14 |
댓글