[프로그래머스] 이웃한 칸



Programmers - [PCCE 기출문제] 이웃한 칸




사용 언어 - C++

소요 시간 - 약 10분

정답 여부 - O




문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/250125



문제 요약

  1. 칸마다 색깔이 칠해진 2차원 격자 보드판이 주어짐
  2. 지정된 칸을 기준으로 이웃한 칸을 비교해서 같은 색깔이 있다면 answer++
  3. return answer

ex. )

⭐❤️🌙
🌙❤️⭐
⭐🌙🌙

h = 1, w = 1 이라면, board[1][1] 기준 board[0][1]에 같은 모양이 있으므로 answer = 1 return




최종 코드

#include <string>
#include <vector>

using namespace std;

int solution(vector<vector<string>> board, int h, int w) {
    int answer = 0;
    
    if((h + 1 < board.size()) && board[h][w] == board[h + 1][w])
        answer++;
    
    if((h - 1 >= 0) && board[h][w] == board[h - 1][w])
        answer++;
    
    if((w + 1 < board[0].size()) && board[h][w] == board[h][w + 1])
        answer++;
    
    if((w - 1 >= 0) && board[h][w] == board[h][w - 1])
        answer++;
    
    return answer;
}




트러블 슈팅

  1. X




문제 풀이 후 소감

  • 문제에서 주어진 의사코드에는 for문을 사용하라고 했다. 물론 for문을 사용하면 if문을 2개 정도로 줄일 수 있지만, if문 안에 들어가야될 코드가 많아진다. 가독성이 떨어지기도 하기 때문에 그냥 if문으로 했다. 굳이 for문을 써보자면(조금이나마 가독성이 좋게 짜봤다)
#include <string>
#include <vector>
#include <iostream>

using namespace std;

int solution(vector<vector<string>> board, int h, int w) {
    int answer = 0;
    
    int dh[4] = {0, 1, -1, 0};
    int dw[4] = {1, 0, 0, -1};
    
    for(int i = 0; i < 4; i++)
    {
        int x = h + dh[i];
        int y = w + dw[i];
        
        bool bCheck = true;
        bCheck &= (x >= 0);
        bCheck &= (x < board.size());
        bCheck &= (y >= 0);
        bCheck &= (y < board[0].size());
            
        if(bCheck)
            if((board[h][w] == board[x][y]))
                answer++;
    }
    
    return answer;
}