이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

코딩테스트

[프로그래머스][C++] [1차] 프렌즈4블록

이쿠우우 2022. 4. 15. 19:01
반응형

 

https://programmers.co.kr/learn/courses/30/lessons/17679

 

코딩테스트 연습 - [1차] 프렌즈4블록

프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙

programmers.co.kr

 

글쓴이의 답

개인적인 풀이 임으로

이것보다 더 좋은 알고리즘은 많음...

이렇게도 풀이하는구나.. 공유하기 위해 올림...

#include <string>
#include <vector>
#include <iostream>

using namespace std;

bool deleteMap(int m , int n, vector<string> &board, vector<string> checkMap, int &answer){
    int result = false;
    
    char friendCheck;
    
    for(int h =0; h < m; h++){
        for(int w = 0; w<n; w++){
            friendCheck = board[h][w];
            if('X' == friendCheck){
                continue;
            }
            bool check = false;
            
            if((h+1 < m) && (w+1 < n)){
                if((friendCheck == board[h+1][w]) &&
                   (friendCheck == board[h][w+1]) &&
                   (friendCheck == board[h+1][w+1]) ){
                     check = true;
                }
            }
            
            if(true == check){
                result = true;
                checkMap[h][w]      = 'X';
                checkMap[h+1][w]    = 'X';
                checkMap[h][w+1]    = 'X';
                checkMap[h+1][w+1]  = 'X';
            }
        }        
    }
    
    for(int w = 0; w<n; w++){
        for(int h =0; h < m; h++){
            if('X' == checkMap[h][w] ){
                answer++;
                char temp = '\0';
                char next = '\0';
                for(int d = 0; d < h; d++){
                    if('\0' != temp){
                        char next = board[d][w];
                        board[d][w] = temp;
                        temp = next;
                    }
                    else{
                        temp = board[d][w];
                        board[d][w] = 'X';
                    }                    
                }
                if('\0' != temp){
                    board[h][w] = temp;
                }
            }
        }
    }
    
    
    
    return result;
}

int solution(int m, int n, vector<string> board) {
    int answer = 0;   
    
    bool result = true;
    while(true == result){        
        vector<string> checkMap;
        for(int h =0; h < m; h++){
            string temp = "";
            for(int w = 0; w<n; w++){
                temp += "O";
            }
            checkMap.push_back(temp);
        }
        
        result = deleteMap(m, n, board, checkMap, answer);
    }
    
    
    return answer;
}



꾸준히 하다보면 실력이 늘겠지..

반응형