프로그래머스/Level_2

[Level_2 / C++ / 카카오] 프렌즈4블록

배발자 2022. 1. 20.
반응형

문자열 벡터가 만약 

"TTTANT"

"RRFACC"

"RRRFCC"

"TRRRAA"

"TTMMMF"

"TMMTTJ"

 

이런식으로 주어졌다고 가정하자. 

난 이것을 오른쪽으로 90도 회전했다.

 

   

 

이런식으로 돌려서 위에서부터 차례대로 v[0]의 문자열 ~ v[5]의 문자열로 생각하는 것이다. (쉽게 생각할 수 있도록!)

 

벡터 v를 하나하나씩 살펴보는데 정사각형 2X2 라는 점을 고려해서, 

현재 원소에서 오른쪽, 아래쪽, 오른쪽+아래쪽을 확인해야하기 때문에 반복문에서는

열과 행을 하나씩 빼준값 까지 돌아야한다. 

 

각 벡터의 문자열들의 사이즈가 1보다 같거나 작으면 애초에 비교대상이 되지 않으니까 continue 해준다. 

 

그리고 map이라는 이차원 맵을 생성하여 서로 같은 원소가 총 4개가 나오면 map의 해당 인덱스의 값에 1로 세팅하면서 후에 지워야 할 원소라는 것을 기록해둔다. 

 

모든 원소를 다 돌아보고 난후에 map에 1로 설정 되어있는 값의 인덱스 번호는 v 벡터 문자열에서 지워야할 문자의 인덱스라고 판단하면 된다. 그리고 v벡터의 지워야 할 문자들을 없애고 새로 갱신해준다.  

#include <string>
#include <vector>
using namespace std;
int solution(int m, int n, vector<string> board) {
    int answer = 0;
    vector <string> v; 
    for(int i=0; i<n; i++){ //map 뒤집기
        string s= ""; 
        for(int j=m-1; j>=0; j--)s+=board[j][i];  
        v.push_back(s); 
    }
    while(1){
        vector<vector<int>>map(n, vector<int>(m,0)); 
        int ch=0; 
        for(int i=0; i<v.size()-1; i++){
            if(v[i].size()<=1||v[i+1].size()<=1)continue; 
            for(int j=0; j<v[i].size()-1; j++){
                if(j>=v[i+1].size()-1)continue; 
                else{
                    char c = v[i][j];                
                    if(c==v[i][j+1]&&c==v[i+1][j]&&c==v[i+1][j+1]){
                        map[i][j]=map[i][j+1]=map[i+1][j]=map[i+1][j+1]=1;    
                        ch=1; 
                    } 
                }
            }
        }
        if(!ch)break;    
        for(int i=0; i<v.size(); i++){
            string s=""; 
            for(int j=0; j<v[i].size(); j++){
                if(map[i][j]==0) s+=v[i][j];                      
                else answer++;                 
            }
            v[i]=s; 
        }    
    }       
    return answer;
}

 

 

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

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

programmers.co.kr

 

반응형

댓글