[2578번] 빙고
Algorithm/백준 문제 풀이

[2578번] 빙고

반응형

백준 2578번: 빙고

 

2578번: 빙고

첫째 줄부터 다섯째 줄까지 빙고판에 쓰여진 수가 가장 위 가로줄부터 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 여섯째 줄부터 열째 줄까지 사회자가 부르는 수가 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 빙고판에 쓰여진 수와 사회자가 부르는 수는 각각 1부터 25까지의 수가 한 번씩 사용된다.

www.acmicpc.net

이 문제는 조금 생각해야 할 게 필요합니다.

제가 틀렸던 과정을 최대한 비슷하게 밟아보겠습니다.


처음에는 단순하게 5X5 크기의 빙고판이니 '브루트 포스' 기법으로 풀 수 있겠다는 확신이 들었습니다.

그러니 대각선과 가로, 세로줄을 검사하여 빙고인지 검사할 함수와 빙고의 개수를 세어주기만 하면 된다고 생각했습니다.

하지만 틀렸고 무엇이 문제인지 다시 살펴보게 되었습니다.

 

먼저 빙고 검사 함수는 문제가 없다는 것을 확인하고 틀린 결괏값이 나오는 과정의 문제점을 살펴보았습니다.

그랬더니 값을 입력받고 빙고가 만들어졌는지 검사하는 타이밍에 빙고가 생겼을 때에는 단순히 count를 +1만 해주는 부분이 문제였다는 것을 깨달았습니다. 즉 한 번 빙고가 만들어지고 다음 값을 입력받았을 때에 중복으로 빙고를 세었다는 얘기가 되죠.

 

그래서 저는 어떻게 할까 생각하던 중에 빙고의 줄의 개수가 한정되어있다는 사실에 주목했고, 중복을 없앨 수 있는 좋은 방법을 떠올렸습니다.

먼저, 제 코드를 보시면 알겠지만 생길 수 있는 각 빙고의 줄들에 가상의 번호들을 붙여주었습니다.

가로줄 5개 + 세로줄 5개 + 대각선 2개 = 총 12개의 선 (index: 0 ~ 11)

그리고 중복값들을 편하게 관리해 줄 수 있는 'set container'를 사용했습니다.

 

그리고 성공했죠.


저는 이 문제가 간과할 수 있는 점을 제대로 짚은 문제였다고 생각합니다.

생각해야 하는 점을 제대로 지적해줘야 했다는 점에서 좋은 문제라고 생각합니다.

 

[소스 보기]

반응형