코테/프로그래머스

[프로그래머스/Lv. 0] 캐릭터의 좌표

imname1am 2023. 2. 11. 16:27
반응형

내 코드 (틀림)

class Solution {
    public int[] solution(String[] keyinput, int[] board) {
        int[] answer = new int[2];
        
        // 상하좌우 cnt 배열 생성
        int[] direction = new int[4];        
        
        
        for(int i = 0 ; i < keyinput.length ; i++) {
            if(keyinput[i].equals("up"))        direction[0]++;     // 상
            else if(keyinput[i].equals("down")) direction[1]++;     // 하
            else if(keyinput[i].equals("left")) direction[2]++;     // 좌
            else if(keyinput[i].equals("right")) direction[3]++;    // 우
        }
        
        for(int d=0 ; d < direction.length ; d++) {
            // 좌우가 board 가로 크기를 넘어가는 경우
            if((d==2) || (d==3)) {
                if(direction[d] >= (board[0]/2)) {
                    direction[d] = board[0]/2;
                }
            }
            // 상하가 board 세로 크기를 넘어가는 경우
            else if((d==0) || (d==1)) {
                if(direction[d] >= (board[1]/2)) {
                    direction[d] = board[1]/2;
                }
            }
        }
        
        // 가로 (좌우)
        answer[0] = direction[3] - direction[2];
        
        // 세로 (상하)
        answer[1] = direction[0] - direction[1];
        
        return answer;
    }
}

길긴 하지만...나름 예외 안 놓치게끔 짰다고 생각했는데 패스 못 함....ㅠ

그래서 어떤 반례가 있는지 질문하기 란에서 찾아봤고...

결국 더 단순히 짤 수 있는 코드를 찾아보기로 했다..

 

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

프로그래머스 캐릭터의 좌표

머쓱이는 RPG게임을 하고 있습니다. 게임에는 up, down, left, right 방향키가 있으며 각 키를 누르면 위, 아래, 왼쪽, 오른쪽으로 한 칸씩 이동합니다. 예를 들어 0,0에서 up을 누른다면 캐릭터의 좌표는

velog.io

윗 분 코드로 패스했다...!

 

class Solution {
    public int[] solution(String[] keyinput, int[] board) {
        int[] answer = new int[2];
    
        for(String s : keyinput) {
            switch(s) {
                case "up" -> {
                    if(answer[1] >= board[1] / 2) {
                        continue;
                    }
                    answer[1]++;
                }

                case "down" -> {
                    if(answer[1] <= -(board[1] / 2)) {
                        continue;
                    }
                    answer[1]--;
                }

                case "right" -> {
                    if(answer[0] >= board[0] / 2) {
                        continue;
                    }
                    answer[0]++;
                }

                default -> {
                    if(answer[0] <= -(board[0] / 2)) {
                        continue;
                    }
                    answer[0]--;
                }
            }
        }
        
        return answer;
    }
}

case문을 사용하셨네...

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

다른 정답 코드들도 봤는데 나한테는 이게 제일 이해하기 단순하고 쉬웠다...

class Solution {
    public int[] solution(String[] keyinput, int[] board) {
       int[] answer = {0 ,0};
       
       int width  = board[0] / 2;
       int height = board[1] / 2;
       
       for(String s : keyinput) {
       	if(s.equals("up") && (answer[1] < height))  {
            answer[1]++;
        } else if(s.equals("down") && (answer[1] > -height)) {
            answer[1]--;
        } else if(s.equals("left") && (answer[0] > -width)) {
            answer[0]--;
        } else if(s.equals("right") && (answer[0] < width)) {
            answer[0]++;
        } 
       }

        return answer;
    }
}
반응형