프로그래머스 LV1.[PCCE 기출문제] 9번 / 이웃한 칸
#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++){
if ((0 <= h + dh[i]) && (h + dh[i] < board.size()) && (0 <= w+dw[i]) && (w+dw[i] < board[0].size())){
if (board[h][w] == board[h+dh[i]][w+dw[i]]){
answer++;
}
}
}
return answer;
}
answer - 같은 색의 개수를 저장할 변수
dh - h의 변화량
dw - w의 변화량
for문으로 0-3까지 i를 변화하며 dh, dw를 h, w에 합한다.
h+dh[i]가 0이상 board.size()이고, w+dw[i]가 0이상 board[0].size()이면 h, w와 같은지 비교한다.
비교했을 때 같으면 answer++, 아니면 변화없이 지나간다.
0이상이여서 기호를 <= 를 사용했어야 했는데 < 만 사용하여 풀이가 되지 않았었다.
기호를 잘 보고 사용해야한다.
#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 h_check = h + dh[i];
int w_check = w + dw[i];
if ((0 <= h_check) && (h_check < board.size()) && (0 <= w_check) && (w_check < board[0].size())){
if (board[h][w] == board[h_check][w_check]){
answer++;
}
}
}
return answer;
}
내 풀이와 다른 점
변수로 h_check, w_chech를 만들어서 계속 반복해서 계산을 하지 않는다.
장기적으로 봤을 때 연산의 양이 줄어들고, 코드의 길이도 줄어든다.