문제

프로그래머스 문제링크
풀이 코드
class Solution {
public int[] solution(String[] keyinput, int[] board) {
int[] answer = {0, 0};
int maxWidth = board[0] / 2;
int maxHeight = board[1] / 2;
for (String key : keyinput)
{
switch (key)
{
case "up":
if (answer[1] < maxHeight)
answer[1] += 1;
break;
case "down":
if (answer[1] > -maxHeight)
answer[1] -= 1;
break;
case "left":
if (answer[0] > -maxWidth)
answer[0] -= 1;
break;
case "right":
if (answer[0] < maxWidth)
answer[0] += 1;
break;
}
}
return answer;
}
}
리뷰
- 방향키 input(up, down, left, right)이 있으며, up -> y좌표 : +1, down -> y좌표 : -1, left -> x좌표 : -1, right -> x좌표 : +1 입력된 방향키의 값만큼 캐릭터의 좌표가 변경됩니다.
주의 사항으로 좌표의 크기는 정해져 있음으로 board/2를 통해 좌표의 max값을 구했습니다.
- 확장된 for문을 통해 keyinput String배열에 있는 값을 key String에 넣어 switch문을 통해 key안의 문자열을 판별하도록 하였습니다.
2-1. 입력받은 방향키를 인식하여 좌표 최댓값보다 작다면 입력받은 방향키가 해당하는 값 만큼을 계산하여 캐릭터를 움직여줍니다.
2-2. down과 left는 최솟값을 구해야함으로 -maxHeight를 해줌으로 최솟값을 설정해주었습니다.
시행착오 [테스트케이스8 실패]
class Solution {
public int[] solution(String[] keyinput, int[] board) {
int[] answer = {0, 0};
for(String key : keyinput)
{
if(key.equals("up"))
answer[1] += 1;
else if(key.equals("down"))
answer[1] -= 1;
else if(key.equals("left"))
answer[0] -= 1;
else if(key.equals("right"))
answer[0] += 1;
}
int maxWidth = board[0] / 2;
int maxHeight = board[1] / 2;
if (answer[0] > maxWidth)
answer[0] = maxWidth;
else if (answer[0] < -maxWidth)
answer[0] = -maxWidth;
if (answer[1] > maxHeight)
answer[1] = maxHeight;
else if (answer[1] < -maxHeight)
answer[1] = -maxHeight;
return answer;
}
}
시행착오 리펙토링[성공]
class Solution {
public int[] solution(String[] keyinput, int[] board) {
int[] answer = {0, 0};
int maxWidth = board[0] / 2;
int maxHeight = board[1] / 2;
for(String key : keyinput)
{
if(key.equals("up") && answer[1] < maxHeight)
answer[1] += 1;
else if(key.equals("down") && answer[1] > -maxHeight)
answer[1] -= 1;
else if (key.equals("left") && answer[0] > -maxWidth)
answer[0] -= 1;
else if(key.equals("right") && answer[0] < maxWidth)
answer[0] += 1;
}
return answer;
}
}