코딩테스트/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 배열의 값을 저렇게 설정해놓고 문제 풀이하는 것을 많이 봤는데, 이것을 활용하면 문제를 더 깔끔하게 풀 수 있을 것 같다.
✍🏻느낀점
문제는 간단했지만, 조금 지저분한게 푼 경향이 있지 않나 싶다. 많이 봤음에도 불구하고 익숙하지 않아서 위의 방식처럼 풀지 않았었는데, 다음에 비슷한 문제를 풀게 되면 이를 활용해서 더 깔끔하게 풀도록 노력해야겠다!