[프로그래머스] LV1.[PCCE 기출문제] 9번 / 이웃한 칸

윤인경·2024년 1월 16일
0

코딩테스트

목록 보기
36/38

문제 설명

프로그래머스 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를 만들어서 계속 반복해서 계산을 하지 않는다.
장기적으로 봤을 때 연산의 양이 줄어들고, 코드의 길이도 줄어든다.

profile
코딩 공부 및 프로젝트 정리

0개의 댓글