-
프로그래머스 [1차]프렌즈4블록Computer Science/프로그래머스 2023. 9. 28. 22:25
https://school.programmers.co.kr/learn/courses/30/lessons/17679
나는 이 문제를 4개의 블럭이 같다면, set<vector<int>>에 좌표를 담는 방식부터 접근했다.
그리고 set의 값이 비어있지 않다면, 해당 블록을 부시는데
블록의 위에서부터 아래까지 해당 블록을 제거하도록 구현했다.
그리고 set과, 블록을 탐색하는 함수를 재귀적으로 해서 구현했다.
#include <string> #include <vector> #include <set> #include <iostream> using namespace std; void drop_block(vector<string>& board, set<vector<int>> check) { for (const auto& idx : check) { board[idx[0]][idx[1]] = '#'; for (int i = idx[0]; i > 0; i--) { swap(board[i][idx[1]], board[i - 1][idx[1]]); } } } int check_board(int m, int n, vector<string> board) { set<vector<int>> check; for(int i = 0; i < m -1; ++i) { for(int j = 0; j < n -1; ++j) { if(board[i][j] != '#') { if(board[i][j] == board[i][j + 1] && board[i][j] == board[i + 1][j] && board[i][j] == board[i + 1][j + 1]) { cout << j << " " << i << endl; check.insert({i, j}); check.insert({i, j + 1}); check.insert({i + 1, j}); check.insert({i + 1, j + 1}); } } } } if(check.empty()) { return 0; }else { drop_block(board, check); return check.size() + check_board(m, n, board); } } int solution(int m, int n, vector<string> board) { int answer = 0; answer = check_board(m, n, board); return answer; }
'Computer Science > 프로그래머스' 카테고리의 다른 글
카메라 (0) 2023.09.29 프로그래머스 Lv2 [1차]뉴스 클러스터링 (0) 2023.09.29 프로그래머스 Lv2 [1차]캐시 (0) 2023.09.28 프로그래머스 Lv2 [3차]압축 (0) 2023.09.26 프로그래머스 Lv2 [3차]파일명 정렬 (0) 2023.09.26