[programmers] 캐릭터의 좌표

J-Cheol·2023년 11월 22일
0

프로그래머스

목록 보기
19/27
post-thumbnail

문제


프로그래머스 문제링크

풀이 코드


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;
    }
}

리뷰


  1. 방향키 input(up, down, left, right)이 있으며, up -> y좌표 : +1, down -> y좌표 : -1, left -> x좌표 : -1, right -> x좌표 : +1 입력된 방향키의 값만큼 캐릭터의 좌표가 변경됩니다.
    주의 사항으로 좌표의 크기는 정해져 있음으로 board/2를 통해 좌표의 max값을 구했습니다.
  2. 확장된 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;
    }
}
profile
신입 백엔드 개발자(JAVA, Spring Boot, MYSQL)

0개의 댓글