반응형
https://programmers.co.kr/learn/courses/30/lessons/17679
글쓴이의 답
개인적인 풀이 임으로
이것보다 더 좋은 알고리즘은 많음...
이렇게도 풀이하는구나.. 공유하기 위해 올림...
#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;
}
꾸준히 하다보면 실력이 늘겠지..
반응형
'코딩테스트' 카테고리의 다른 글
[프로그래머스][C++] 삼각 달팽이 (0) | 2022.04.15 |
---|---|
[프로그래머스][C++] [1차] 2개 이하로 다른 비트 (0) | 2022.04.15 |
[프로그래머스][C++] 피로도 (2) | 2022.04.15 |
[프로그래머스][C++] 큰 수 만들기 (0) | 2022.04.15 |
[프로그래머스][C++] 카펫 (0) | 2022.04.15 |