문제 링크입니다: www.acmicpc.net/problem/21609
21609번: 상어 중학교
상어 중학교의 코딩 동아리에서 게임을 만들었다. 이 게임은 크기가 N×N인 격자에서 진행되고, 초기에 격자의 모든 칸에는 블록이 하나씩 들어있고, 블록은 검은색 블록, 무지개 블록, 일반 블록
www.acmicpc.net
문제를 꼼꼼하게 읽어야하는 문제였습니다.
알고리즘은 아래와 같습니다.
1. 저 같은 경우 블록그룹을 정할 때, 무지개 블록들에 1 ~ M 색깔을 각각 칠하면서 가장 큰 블록그룹을 찾았습니다.
1.1 getBlockGroup 메서드 내 tempBoard가 무지개 블록들을 색깔 입힌 판이고, board는 기존 판입니다. 따라서, 구한 블록 그룹 내 무지개 블록 개수를 구할 수 있습니다.
1.2 가장 큰 블록 그룹을 찾을 때 BFS 알고리즘을 통해 구해줬습니다.
2. 1번에서 구한 가장 큰 블록 그룹에 속한 블록들을 제거해줍니다. (저 같은 경우 -2로 채웠습니다.)
3. 중력을 적용합니다. (gravity 메서드 참고)
4. 반시계 방향으로 판을 90도 회전해주고 (rotateBoard 메서드 참고)
5. 다시 중력을 적용해줍니다.
6. 1번에서 그룹을 못 찾을 때까지 1 ~ 5번을 반복해줍니다.
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
백준 20056번 마법사 상어와 파이어볼 (1) | 2021.04.30 |
---|---|
백준 21610번 마법사 상어와 비바라기 (1) | 2021.04.29 |
백준 21608번 상어 초등학교 (1) | 2021.04.28 |
백준 19771번 Сапсан (0) | 2021.04.27 |
C++ 백준 2935번 소음 (0) | 2021.04.26 |