[프로그래머스] Level0. 캐릭터의 좌표

Benjamin·2023년 2월 10일
0

프로그래머스

목록 보기
18/58

내 풀이

class Solution {
    public int[] solution(String[] keyinput, int[] board) {
        int x = 0;
        int y = 0;
        for(int i=0; i<keyinput.length; i++) {
            if(x > board[0]/2) x = board[0]/2;
            if(x < -(board[0]/2)) x = -(board[0]/2);
            if(y > board[1]/2) y = board[1]/2;
            if(y < -(board[1]/2)) y = -(board[1]/2);
            switch(keyinput[i]) {
                case "left" : x--; break;
                case "right" : x++; break;
                case "up" : y++; break;
                case "down" : y--; break;
            }
        }
        if(x > board[0]/2) x = board[0]/2;
        if(x < -(board[0]/2)) x = -(board[0]/2);
        if(y > board[1]/2) y = board[1]/2;
        if(y < -(board[1]/2)) y = -(board[1]/2);
        int[] answer = {x,y};
        return answer;
    }
}

if문으로 범위를 넘었는지 체크하는게 중복되니 좋지않은 코드같다.

다른 풀이

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;
    }
  • 일단 삼항연산자를 x = z - y ? t : f 이런식을 쓸 수 있다.
    now[0] -= now[0]>-(board[0]/2)?1:0

따라서 이걸 이용해서 이동할때마다 체크한다.

공부한 사항

  • 삼항 연산자를 어떤 연산중간에 쓸 수도있다.

0개의 댓글