코딩테스트/Programmers

[JAVA] 이웃한 칸

hxx_1 2024. 6. 10. 17:36

< 내 풀이 >

class Solution {
    public int solution(String[][] board, int h, int w) {
        String color=board[h][w]; //현재 색깔
        int answer = 0;
        int n=board[0].length;
        
        if(h-1>=0 && board[h-1][w].equals(color)) // 위
            answer++;
        if(h+1<=n-1&&board[h+1][w].equals(color)) // 아래 
            answer++;
        if(w+1<=n-1&&board[h][w+1].equals(color)) //오른쪽
            answer++;
        if(w-1>=0&&board[h][w-1].equals(color)) //왼쪽
            answer++;
        
        return answer;
    }
}

 

✏️ 풀이 과정

 

1. color 변수에 현재 색깔을 저장한다.

2. 현재 위치의 위, 아래, 오른쪽, 왼쪽 중에서 현재 색깔과 색이 같으면 answer의 값을 증가시킨다.

3. answer을 반환한다. 

 

< 다른 사람의 풀이 >

class Solution {
    public int solution(String[][] board, int h, int w) {
        int n = board.length; 
        int count = 0; 
        int[] dh = {0,1,-1,0}; 
        int[] dw = {1,0,0,-1};

        for(int i = 0; i < 4; i++){
            int h_check = h + dh[i]; 
            int w_check = w + dw[i];
            if(h_check >= 0 && h_check < n && w_check >= 0 && w_check < n){
                if(board[h][w].equals(board[h_check][w_check])){
                    count++;
                }
            }
        }
        return count;
    }
}

➡️위의 코드가 문제에 나온 의사코드대로 한 방식이다. 다른 문제에서도 배열의 위,아래,오른쪽,왼쪽 값을 확인할 때 dh 와 dw 배열의 값을 저렇게 설정해놓고 문제 풀이하는 것을 많이 봤는데, 이것을 활용하면 문제를 더 깔끔하게 풀 수 있을 것 같다. 

 

✍🏻느낀점

 

문제는 간단했지만, 조금 지저분한게 푼 경향이 있지 않나 싶다. 많이 봤음에도 불구하고 익숙하지 않아서 위의 방식처럼 풀지 않았었는데, 다음에 비슷한 문제를 풀게 되면 이를 활용해서 더 깔끔하게 풀도록 노력해야겠다!