[프로그래머스] 이웃한 칸
Programmers - [PCCE 기출문제] 이웃한 칸
사용 언어 - C++
소요 시간 - 약 10분
정답 여부 - O
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/250125
문제 요약
- 칸마다 색깔이 칠해진 2차원 격자 보드판이 주어짐
- 지정된 칸을 기준으로 이웃한 칸을 비교해서 같은 색깔이 있다면 answer++
- 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;
}
트러블 슈팅
- 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;
}