KAKAO 2018 BLIND RECRUITMENT의 구현 문제이다.
구현은 언제나 세세한 동작의 구현과 최적화가 어려운 것 같다.
먼저 내가 생각한 풀이는 아래와 같다.
- 가장 먼저, 참고용 Copy Board를 만들어 놓는다.
- Copy Board를 만드는 이유는, Board를 바꿔버리면 겹친 부분을 지울 수 없기 때문이다.
- A가 2 x 3으로 6개 겹쳐있다면, 2 x 2가 2개 겹쳐있으니 6개 모두 지워져야 한다.
- 하지만 내 풀이에서는 앞 2 x 2를 먼저 #으로 바꿔버리므로, 겹친 부분을 검사할 수 없다.
- Copy Board를 2 x 2로 모든 칸을 훑으며 검사한다.
- Copy Board의 2 x 2가 모두 같은 칸이라면, Board의 2 x 2를 #으로 바꾼다.
- 모두 훑었으면, 공중에 뜬 블럭을 아래로 내린다.
- Copy Board에 Board의 모습을 복사한다.
- 더 이상 바꿀 2 x 2가 없을 때 까지 위 과정을 반복한다.
예상대로 시간이 굉장히 많이 걸리는 코드였다.
통과는 했지만, 다른 사람의 최적화 된 풀이들을 좀 더 볼 필요가 있겠다.
내 풀이
최적화된 풀이: Stack
다른 사람의 풀이를 보다가 Stack을 이용한 풀이를 보았다.
세상에.. Stack을 이용하면 굳이 블록을 내리는 Logic을 쓸 필요가 없다.