๐ ๋ฌธ์
https://www.acmicpc.net/problem/11559
๋ฌธ์
๋ฟ์๋ฟ์์ ๋ฃฐ์ ๋ค์๊ณผ ๊ฐ๋ค.
ํ๋์ ์ฌ๋ฌ ๊ฐ์ง ์๊น์ ๋ฟ์๋ฅผ ๋๋๋ค. ๋ฟ์๋ ์ค๋ ฅ์ ์ํฅ์ ๋ฐ์ ์๋์ ๋ฐ๋ฅ์ด๋ ๋ค๋ฅธ ๋ฟ์๊ฐ ๋์ฌ ๋๊น์ง ์๋๋ก ๋จ์ด์ง๋ค.
๋ฟ์๋ฅผ ๋๊ณ ๋ ํ, ๊ฐ์ ์ ๋ฟ์๊ฐ 4๊ฐ ์ด์ ์ํ์ข์ฐ๋ก ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด ์ฐ๊ฒฐ๋ ๊ฐ์ ์ ๋ฟ์๋ค์ด ํ๊บผ๋ฒ์ ์์ด์ง๋ค. ์ด๋ 1์ฐ์๊ฐ ์์๋๋ค.
๋ฟ์๋ค์ด ์์ด์ง๊ณ ๋์ ์์ ๋ค๋ฅธ ๋ฟ์๋ค์ด ์๋ค๋ฉด, ์ญ์ ์ค๋ ฅ์ ์ํฅ์ ๋ฐ์ ์ฐจ๋ก๋๋ก ์๋๋ก ๋จ์ด์ง๊ฒ ๋๋ค.
์๋๋ก ๋จ์ด์ง๊ณ ๋์ ๋ค์ ๊ฐ์ ์์ ๋ฟ์๋ค์ด 4๊ฐ ์ด์ ๋ชจ์ด๊ฒ ๋๋ฉด ๋ ํฐ์ง๊ฒ ๋๋๋ฐ, ํฐ์ง ํ ๋ฟ์๋ค์ด ๋ด๋ ค์ค๊ณ ๋ค์ ํฐ์ง์ ๋ฐ๋ณตํ ๋๋ง๋ค 1์ฐ์์ฉ ๋์ด๋๋ค.
ํฐ์ง ์ ์๋ ๋ฟ์๊ฐ ์ฌ๋ฌ ๊ทธ๋ฃน์ด ์๋ค๋ฉด ๋์์ ํฐ์ ธ์ผ ํ๊ณ ์ฌ๋ฌ ๊ทธ๋ฃน์ด ํฐ์ง๋๋ผ๋ ํ๋ฒ์ ์ฐ์๊ฐ ์ถ๊ฐ๋๋ค.
๋จ๊ท๋ ์ต๊ทผ ๋ฟ์๋ฟ์ ๊ฒ์์ ํน ๋น ์ก๋ค. ์ด ๊ฒ์์ 1:1๋ก ๋ถ๋ ๋์ ๊ฒ์์ด๋ผ ์ ์๋ ๊ฒ๋ ์ค์ํ์ง๋ง, ์๋๋ฐฉ์ด ํฐ๋จ๋ฆฐ๋ค๋ฉด ์ฐ์๊ฐ ๋ช ๋ฒ์ด ๋ ์ง ๋ฐ๋ก ํ์ ํ ์ ์๋ ๋ฅ๋ ฅ๋ ํ์ํ๋ค. ํ์ง๋ง ์์ง ์ค๋ ฅ์ด ๋ถ์กฑํ์ฌ ๋จ๊ท๋ ์๊ธฐ ํ๋์๋ง ์ ๊ฒฝ ์ฐ๊ธฐ ๋ฐ์๋ค. ์๋๋ฐฉ์ ํ๋๊ฐ ์ฃผ์ด์ก์ ๋, ์ฐ์๊ฐ ๋ช ๋ฒ ์ฐ์์ผ๋ก ์ผ์ด๋ ์ง ๊ณ์ฐํ์ฌ ๋จ๊ท๋ฅผ ๋์์ฃผ์!
์ ๋ ฅ
์ด 12๊ฐ์ ์ค์ ํ๋์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ฉฐ, ๊ฐ ์ค์๋ 6๊ฐ์ ๋ฌธ์๊ฐ ์๋ค.
์ด๋ .์ ๋น๊ณต๊ฐ์ด๊ณ .์ด ์๋๊ฒ์ ๊ฐ๊ฐ์ ์๊น์ ๋ฟ์๋ฅผ ๋ํ๋ธ๋ค.
R์ ๋นจ๊ฐ, G๋ ์ด๋ก, B๋ ํ๋, P๋ ๋ณด๋ผ, Y๋ ๋ ธ๋์ด๋ค.
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ํ๋๋ ๋ฟ์๋ค์ด ์ ๋ถ ์๋๋ก ๋จ์ด์ง ๋ค์ ์ํ์ด๋ค. ์ฆ, ๋ฟ์ ์๋์ ๋น ์นธ์ด ์๋ ๊ฒฝ์ฐ๋ ์๋ค.
์ถ๋ ฅ
ํ์ฌ ์ฃผ์ด์ง ์ํฉ์์ ๋ช์ฐ์๊ฐ ๋๋์ง ์ถ๋ ฅํ๋ค. ํ๋๋ ํฐ์ง์ง ์๋๋ค๋ฉด 0์ ์ถ๋ ฅํ๋ค.
โ๏ธ ํ์ด
๐ก ์ฐ์๊ฐ ๋ฌด์์ธ์ง ๊ฐ๋ ์ ์ ๋๋ก ์ก๊ณ ์์ํด์ผ ํ๋ ๋ฌธ์ ์ด๋ค. ํ "๋ฌถ์"์ ํฐํธ๋ฆฌ๋๊ฒ ์๋๋ค. "๋ฌถ์๋ค"์ด ๋ชจ๋ ํฐ์ง๊ณ ๋์ผ 1 ์ฐ์๊ฐ ๋๋ ๊ฒ์ด๋ค.
1. ์์ ํ์์ผ๋ก ๋ฟ์๋ฅผ ์ฐพ์๋ธ๋ค.
2. ๋ฟ์๊ฐ ๋ฐ๊ฒฌ๋๋ฉด BFS๋ก ์ฌ๋ฐฉ์ ํ์ธํ์ฌ ๊ฐ์ ์ ๋ฟ์๋ฅผ ์ฐพ๋๋ค. ์ด๋ ๊ฐ์์ ๋ฟ์๊ฐ 4๊ฐ ์ด์ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด ํ๋์ "๋ฌถ์"์ผ๋ก ๊ฐ์ฃผํ๊ณ ํฐํธ๋ฆฐ ํ, group๋ณ์ ์นด์ดํธ๋ฅผ ๋๋ฆฐ๋ค. ์ ์ฒด ์ํ์์ ํ๋์ ๊ทธ๋ฃน์ ์ฐพ์ ๋ ๋ฐ๋ก ํฐํธ๋ฆฌ๊ฒ ๋๋ฏ๋ก, ๊ฐ์ ๊ทธ๋ฃน์ด ์ค๋ณต์ผ๋ก ํฐ์ง ์ผ์ ์๋ค.
3. ์ํ์ ๋๋์ ๋ group ๋ณ์๊ฐ 1 ์ด์์ด๋ฉด 1 ์ฐ์๋ฅผ ํ์ ์ง๋๋ค.
4. ๋ฟ์๋ฅผ ๋ชจ๋ ํฐํธ๋ฆฌ๊ณ ๋ ํ์๋ ๋น ๊ณต๊ฐ์ ๋ฉ์์ค์ผ ํ๋ค. ์ธ๋ก๋ก ํ ์ค์ฉ ๋งจ ์๋์์๋ถํฐ ๋น ๊ณต๊ฐ์ ์ฐพ์๋ธ ํ, ๋ฟ์๊ฐ ๋ํ๋๋ฉด ์๋ ๋น ๊ณต๊ฐ์ ๋ฃ์ด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋ฉ์ด๋ค. ์ด ์ฝ๋์ ๊ฒฝ์ฐ๋ ์ง์ ํ๋์ฉ ์ผ์ด์ค๋ฅผ ๊ทธ๋ ค์ ์ธ๋ฑ์ค๋ฅผ ์กฐ์ ํด๋ด์ผ ์ดํด๊ฐ ๊ฐ๋ค.
๐ป ์์ค์ฝ๋: ์๋ฐ(Java)
public class Main_๋ฐฑ์ค_11559_PuyoPuyo_๊ณจ๋V {
static int H=12, W=6;
static char[][] map;
static int[] dr = {1,-1,0,0};
static int[] dc = {0,0,1,-1};
static Queue<int[]> queue;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
map = new char[H][W];
queue = new LinkedList<int[]>();
for (int i = 0; i < H; i++) {
String str = br.readLine();
for (int j = 0; j < W; j++) {
map[i][j] = str.charAt(j);
}
}//input
int result = 0;
while(true) {
if(!countBomb()) break; // ์ฐ์๊ฐ ์์ผ๋ฉด ๋ฃจํ๋ฅผ ๋์จ๋ค.
result++;
}
System.out.println(result);
}//end of main
private static boolean countBomb() {
int group = 0; // ํฐํธ๋ฆด ๊ทธ๋ฃน์ด ์กด์ฌํ๋์ง ํ์ธํ ์นด์ดํธ๋ณ์
for (int i = H-1; i >=0 ; i--) {
for (int j = 0; j < W; j++) {
if(map[i][j]!='.') { // ๋ฟ์ ๋ฐ๊ฒฌ
if(findMember(i,j)) group++;
}
}
}
if(group==0) return false;
else { // ์ฐ์๊ฐ ์กด์ฌํ๋ฉด
gravity(); // ํฐํธ๋ฆฐ ๋ฟ์๋ฅผ ๋จ์ดํธ๋ฆฌ๊ธฐ
return true;
}
}// end of countBomb
// ํน์ ์์น์ ๋ฟ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฌ๋ฐฉ์ ๊ฐ์์ ๋ฟ์๊ฐ ์๋์ง ํ์ธ
private static boolean findMember(int r, int c) {
boolean[][] visited = new boolean[H][W];
visited[r][c] = true;
queue.offer(new int[] {r,c});
char puyo = map[r][c]; // ํ์ฌ ๋ฟ์ ์
int cnt=1, nr, nc;
while(queue.size()>0) {
int[] cur = queue.poll();
for (int i = 0; i < 4; i++) {
nr = cur[0] + dr[i];
nc = cur[1] + dc[i];
if(nr<0||nc<0||nr>=H||nc>=W||visited[nr][nc]) continue;
if(map[nr][nc]==puyo) {
cnt++;
visited[nr][nc]=true;
queue.offer(new int[] {nr,nc});
}
}
}
if(cnt>=4) {
pang(visited); // ์ฒดํฌํ ๊ฐ์์ ๋ฟ์๋ฅผ ํฐํธ๋ฆฐ๋ค
return true;
}else return false;
}// end of findMember
private static void pang(boolean[][] visited) {
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
if(visited[i][j]) map[i][j]='.';
}
}
}// end of pang
private static void gravity() {
for (int i = 0; i < W; i++) {
int start=-1;
for (int j = H-1; j >= 0; j--) {
if(start==-1) {
if(map[j][i]=='.') start=j; // ๋น ๊ณต๊ฐ ์ธ๋ฑ์ค ์ฐพ๊ธฐ
}else {
if(map[j][i]!='.') { // ๋ฟ์๊ฐ ๋ฐ๊ฒฌ๋๋ฉด
map[start--][i] = map[j][i]; // ๋น ๊ณต๊ฐ์ผ๋ก ๋ฐ์ด์ฃผ๊ณ
map[j][i] = '.'; // ํ์ฌ ๋ฟ์ ์์น๋ ๋น ๊ณต๊ฐ์ผ๋ก ๋ง๋ ๋ค
}
}
}
}
}// end of gravity
}//end of class
๐ ๐ ๐
๏ผฐ๏ฝ๏ฝ๏ฝ๏ฝ ๏ฝ ๏ผข๏ฝ ๏ผณ๏ผก๏ผน
๐๐ฉ๐ข๐ฏ๐ฌ๐ด ๐ง๐ฐ๐ณ ๐ณ๐ฆ๐ข๐ฅ๐ช๐ฏ๐จ