초이로그

[SW Expert Academy]5656:벽돌 깨기 본문

Algorithms/SW Expert Academy

[SW Expert Academy]5656:벽돌 깨기

수연초이 2021. 4. 14. 22:51

너무 복잡한 구현이었던 벽돌깨기!!!

스터디 문제였는데 당시에는 못풀고 드디어 풀었다!!!

 

1. makeSet(): 구슬을 떨어뜨리는 경우(N)만큼 선택할 수 있는 열의 경우의 수를 생성한다

  (예제 1처럼 N=3, W=10인 경우, 10*10*10의 경우의 수를 생성)

  1-1. copyArray(): 경우의 수마다 구슬을 쏴 테스트 하기 위해 주어진 벽돌 정보 배열을 복사한다

  1-2. 생성된 경우의 수(N)대로 구슬을 쏜다.

         1-2-1. findH(): 선택된 열의 가장 최상단 벽돌의 가로측 위치를 구한다.(즉 좌표 정보 획득!) 만약 해당 열에 벽돌이 없으면 continue;

         1-2-2. shootMarvel(): 해당 좌표로 구슬을 쏜다. bfs를 이용하여 벽돌정보만큼 상하좌우로 터뜨린다.

                    1-2-2-1. validation(): 상하좌우에 해당되는 좌표가 가능한 좌표인지 확인.(벽돌이 있는지, 범위내에 있는지)

                                                      만족하면 큐에 해당 좌표 삽입.

         1-2-3. sortBricks(): 구슬 사이의 빈공간을 구슬을 아래로 모두 떨어뜨려(?) 매꾼다.

                                        열마다 큐를 사용하여 남아있는 벽돌을 넣고 아래서부터 붙여넣음.

 

깨진 벽돌의 수는 shootMarvel(), validation()에서 유효한 벽돌인 경우를 카운팅하는 방식으로 구현했다.

 

1번부분 구현에서 턱 막혔었다..그래서 나머지 로직을 먼저 구현한다음, 그 이후에도 생각이 안나길래....

살짝 찾아보고 재귀로 풀어냈다...

나중에 다시 한번 풀면 좋을것 같다.

 

github.com/SuyeonChoi/Algorithms/blob/master/SW%20Expert%20Academy/Java/Simultaion/p5656.java

 

SuyeonChoi/Algorithms

Personal Algorithm Study::solving BOJ, Programmers, and SW Expert Academy - SuyeonChoi/Algorithms

github.com