프렌즈4블록 (프로그래머스) - C++
2021. 2. 22. 23:43ㆍAlgorithm
코딩테스트 연습 - [1차] 프렌즈4블록
프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 프렌즈4블록. 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙
programmers.co.kr
- 문제
- 입력으로 블록의 첫 배치가 주어졌을 때, 지워지는 블록은 모두 몇 개인지 판단하는 프로그램을 제작하라.
- 설명
- 풀이
- 위에서부터 체크하면서 오른쪽, 아래, 대각선을 체크하여 2*2 의 값이 모두 같다면 set에 해당 인덱스를 추가한다.
- set를 사용하는 이유는 중복이 있을 수 있기 때문이다.
- 다 체크를 한 뒤에 지워지는 블록들을 '#'으로 변경해준다.
- 바닥 바로 위 칸부터 올라오면서 아래 빈 공간(#)이 있는지 확인한다.
- 있다면 계속 아래로 확인하면서 블럭의 값과 #을 바꿔준다.(한칸씩 내려가는 것을 구현한 것)
- 바닥 또는 더이상 빈 공간이 아닐 경우 멈춘다.
- 위 과정을 반복하며 더이상 지워지는 블럭이 없을 경우 종료한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
#include <string>
#include <vector>
#include <utility>
#include <set>
#include <iostream>
using namespace std;
int solution(int m, int n, vector<string> board) {
int answer = 0;
set<pair<int,int>> clear;
//m은 세로 n은 가로
//board는 길이가 n인 문자열 배열 m개
//2*2 모양이 되면 사라짐
//블럭이 아래로 떨어짐
//RMAFNTJC
do{
clear.clear();//set 초기화
for(int i = 0 ; i < m-1 ; i++)
{
for(int j = 0 ; j < n-1 ; j++)//빈 공간이 아닌 블럭 중 2*2형태의 블럭인 경우 set에 추가한다.
{
if(board[i][j] != '#' &&
board[i][j] == board[i+1][j] &&
board[i][j] == board[i][j+1] &&
board[i][j] == board[i+1][j+1])
{
cout << i <<"," <<j << " ";
clear.insert(make_pair(i,j));
clear.insert(make_pair(i+1,j));
clear.insert(make_pair(i,j+1));
clear.insert(make_pair(i+1,j+1));
//리스트에 저장?
}
}
}
for(auto const &var : clear)//지워지는 블럭을 #으로 변경해준다.
{
int x = var.first;
int y = var.second;
board[x][y] = '#';
answer++;
}
for(int i = m-2 ; i >= 0 ; i--)
{
for(int j = 0 ; j < n ; j++)
{
int height = i;
while(height < m-1 && board[height+1][j] == '#')//아래로 내려가면서 블럭의 값을 빈 공간에 넣어준다.
{
board[height+1][j] = board[height][j];
board[height][j] = '#';
height++;
}
}
}
}while(!clear.empty());//더 이상 제거되는 블럭이 없을 때 까지 반복한다.
return answer;
}
|
cs |
'Algorithm' 카테고리의 다른 글
카카오프렌즈 컬러링북 (프로그래머스) - C++ (0) | 2021.03.02 |
---|---|
숫자의 표현 (프로그래머스) - C++ (0) | 2021.02.22 |
땅따먹기 (프로그래머스) - C++ (0) | 2021.02.22 |
가장 큰 정사각형 찾기 (프로그래머스) - C++ (0) | 2021.02.20 |
최댓값과 최솟값 (프로그래머스) - C++ (0) | 2021.02.20 |