-
프로그래머스 프렌즈4블록 C++프로그래머스(Programmers) 2022. 7. 14. 23:43반응형
위 초기 배치를 문자로 표시하면 아래와 같다.
TTTANT RRFACC RRRFCC TRRRAA TTMMMF TMMTTJ
각 문자는 라이언(R), 무지(M), 어피치(A), 프로도(F), 네오(N), 튜브(T), 제이지(J), 콘(C)을 의미한다
입력으로 블록의 첫 배치가 주어졌을 때, 지워지는 블록은 모두 몇 개인지 판단하는 프로그램을 제작하라.
입력 형식
- 입력으로 판의 높이 m, 폭 n과 판의 배치 정보 board가 들어온다.
- 2 ≦ n, m ≦ 30
- board는 길이 n인 문자열 m개의 배열로 주어진다. 블록을 나타내는 문자는 대문자 A에서 Z가 사용된다.
출력 형식
입력으로 주어진 판 정보를 가지고 몇 개의 블록이 지워질지 출력하라.
입출력 예제
mnboardanswer
4 5 ["CCBDE", "AAADE", "AAABF", "CCBBF"] 14 6 6 ["TTTANT", "RRFACC", "RRRFCC", "TRRRAA", "TTMMMF", "TMMTTJ"] 15 => DFS나 BFS를 사용하는 문제가 아닌 단순구현문제였습니다.
=> 문제풀이에 관한 설명은 아래의 그림으로 대체하겠습니다.
#include <string> #include <vector> using namespace std; bool TrueBoard[31][31] = {false,}; void init() { for(int i=0; i<32; i++) { for(int j=0; j<32; j++) { TrueBoard[i][j] =false; } } } int solution(int m, int n, vector<string> board) { int answer = 0; //부신 블록수 int breakCnt =0; //2x2 블록 확인할 행렬 int dx[3] = {0,1,1}; int dy[3] = {1,1,0}; do { //TrueBoard 초기화 init(); //while문을 위한 answer 설정 answer = breakCnt; //지울블록 확인 for(int i=0; i<m-1; i++) { for(int j=0; j<n-1; j++) { if(board[i][j] == '-')continue; char tmp = board[i][j]; if((tmp == board[i+dx[0]][j+dy[0]]) && (tmp == board[i+dx[1]][j+dy[1]]) && (tmp == board[i+dx[2]][j+dy[2]])) { TrueBoard[i][j] = true; TrueBoard[i+dx[0]][j+dy[0]] = true; TrueBoard[i+dx[1]][j+dy[1]] = true; TrueBoard[i+dx[2]][j+dy[2]] = true; } } } //블록지우기 for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { //지운다고 체크되어있다면 '-'표시 if(TrueBoard[i][j]) { board[i][j] = '-'; breakCnt++; } } } //빈공간 채워넣기 for(int i=1; i<m; i++) { for(int j=0; j<n; j++) { //해당공간이 비어있다면 if(board[i][j] == '-') { int tmpx = i; while(tmpx > 0) { board[tmpx][j] = board[tmpx-1][j]; board[tmpx-1][j] ='-'; tmpx --; } } } } }while(answer != breakCnt); //이번시도에 부서진 블록수(breakCnt)와 이전시도까지 부서진 블록수와 갯수가 똑같을 경우 => 더이상 부서지지 않을 경우 return answer; }
반응형'프로그래머스(Programmers)' 카테고리의 다른 글
프로그래머스 교점에 별 만들기 C++ (0) 2022.07.13 프로그래머스 2 x n 타일링 (0) 2022.07.07 두 정수 사이의 합 (0) 2022.07.05 프로그래머스 배달 C++ (0) 2022.07.01 프로그래머스 피로도 C++ (0) 2022.05.24