광규니
광규니네
광규니
전체 방문자
오늘
어제
  • 분류 전체보기 (154)
    • 알고리즘 (100)
      • 알고리즘 개념 (2)
      • 문제 풀이 (96)
    • 주절주절 (19)
      • 자격증, 활동 후기 (4)
      • 전시회 후기 (3)
      • 이모저모 (2)
      • 회고 (3)
      • 뜨럼 (7)
    • 운영체제 (9)
    • 개발 지식 (9)
      • Apple Watch (4)
      • MySQL (2)
      • Eclipse (1)
      • XCode (1)
    • 네트워크 공부 (1)
    • 데이터베이스 공부 (5)
    • Java 공부 (7)
    • TMP (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 파이썬
  • 다이나믹 프로그래밍
  • 애플워치 앱 만들기
  • DP
  • 개념
  • 알고리즘
  • OS
  • 구현
  • 자바
  • 프로그래머스
  • 컴퓨터 사이언스
  • 티스토리챌린지
  • BOJ
  • 애플워치 앱
  • 오블완
  • 운영체제
  • 백준
  • 드린이
  • 합주
  • BFS

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
광규니

광규니네

알고리즘/문제 풀이

[Java/자바 백준 11559] PuyoPuyo

2022. 1. 18. 22:43
반응형

풀이

어릴 때 했던 뿌요뿌요 게임이네요 ~~

 

우선 방문하지 않았고, '.'이 아닌 상태였으면 bfs를 진행했습니다.

bfs 중에 인접한 글자들의 갯수를 세어 deleteQueue(없애줄 x,y좌표)와 함께 넣어주고

4개 이상이면 deleteQueue에 있는 좌표들을 빼주어서 .으로 바꾸었습니다.

 

다음 중력을 작용시키기위해 삼중 for문으로 글자들을 밑으로 보내주었습니다.

 

비교적 쉬운문제 !

import java.io.*;
import java.util.*;

public class Main{
	static char[][] map = new char[12][6];
	static boolean[][] visited;
	static Queue <int[]> queue = new LinkedList<>();
	static Queue<int[]> deleteQueue = new LinkedList<>();
	static int answer;
	static int[] dx = {1,0,-1,0};
	static int[] dy = {0,1,0,-1};
	static boolean flag;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		for(int i = 0 ; i < 12 ; i++) {
			String string = br.readLine();
			for(int j = 0 ; j < 6 ; j++) {
				map[i][j] = string.charAt(j);
			}
		}
		
		while(true) {
			visited = new boolean[12][6];
			flag = false;
			for(int i = 0 ; i < 12 ; i++) {
				for(int j = 0 ; j < 6 ; j++) {
					if(map[i][j] != '.' && visited[i][j] == false) {
						bfs(i,j);
					}
				}
			}
			//4개 이상 판단 
			if(flag == false) break;
			answer ++;
			gravity();
		}
		System.out.println(answer);
		
	}
	private static void gravity() {
		for(int j = 0 ; j < 6 ; j++) {			
			for(int i = 10 ; i >= 0 ; i--) {
				for(int k = i ; k < 11 ; k++) {
					if(map[k][j] != '.' && map[k+1][j] =='.') {
						char temp = map[k][j];
						map[k+1][j] = temp;
						map[k][j] = '.';
					}
				}
			}
		}
	}
	private static void bfs(int x, int y) {
		visited[x][y] = true;
		queue.offer(new int[] {x,y});
		deleteQueue.offer(new int[] {x,y});
		int cnt = 1;
		int temp = map[x][y];
		while(!queue.isEmpty()) {
			int[] cur = queue.poll();
			for(int i = 0 ; i < 4 ; i++) {
				int nx = cur[0] + dx[i];
				int ny = cur[1] + dy[i];
				if(0 > nx || nx >= 12 || 0 > ny || ny >= 6 || visited[nx][ny] == true || map[nx][ny] != temp) continue;
				
				cnt += 1;
				visited[nx][ny] = true;
				queue.offer(new int[] {nx, ny});
				deleteQueue.offer(new int[] {nx, ny});
			}
		}
		if(cnt >= 4) {
			flag = true;
			while(!deleteQueue.isEmpty()) {
				int[] cur = deleteQueue.poll();
				map[cur[0]][cur[1]] = '.';
			}
			return;
		}
		deleteQueue.clear();
		return;
	}
}
반응형
저작자표시

'알고리즘 > 문제 풀이' 카테고리의 다른 글

[Java/자바 백준 2174] 로봇 시물레이션  (0) 2022.02.03
[Java/자바 백준 13901] 로봇  (0) 2022.01.28
[Java/자바 백준 1062] 가르침  (0) 2022.01.18
[Java/자바 백준 21609] 상어 중학교  (0) 2022.01.15
[Java/자바 백준 20057] 마법사 상어와 토네이도  (0) 2022.01.10
    '알고리즘/문제 풀이' 카테고리의 다른 글
    • [Java/자바 백준 2174] 로봇 시물레이션
    • [Java/자바 백준 13901] 로봇
    • [Java/자바 백준 1062] 가르침
    • [Java/자바 백준 21609] 상어 중학교
    광규니
    광규니
    공부 및 일상 올리기~

    티스토리툴바