Post
빙고(백준 2578번) | Gihun Son

빙고(백준 2578번)

💡 **Check Point !

( 해당사항 ✓체크 )

  1. 막힘 없이 수월하게 풀린 문제인가? ✓

  2. 1시간이내로 풀렸던 문제인가?

  3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?

  4. 시간을 써도 도무지 풀 수 없는 문제인가?

  5. 솔루션을 찾아봤는가?


난이도 체감

  1. 최상

  2. 하✓


이해도

  1. 완벽히 이해✓

  2. 다소 헷갈리는 부분들이 있음

  3. 이해 못함

문제

빙고 게임은 다음과 같은 방식으로 이루어진다.

먼저 아래와 같이 25개의 칸으로 이루어진 빙고판에 1부터 25까지 자연수를 한 칸에 하나씩 쓴다

https://upload.acmicpc.net/5e2e03f0-5561-43c3-9b65-a752837732ef/-/preview/

다음은 사회자가 부르는 수를 차례로 지워나간다. 예를 들어 5, 10, 7이 불렸다면 이 세 수를 지운 뒤 빙고판의 모습은 다음과 같다.

https://upload.acmicpc.net/6fc024b4-5bf7-42de-b303-406db2e3ff5b/-/preview/

차례로 수를 지워가다가 같은 가로줄, 세로줄 또는 대각선 위에 있는 5개의 모든 수가 지워지는 경우 그 줄에 선을 긋는다.

https://upload.acmicpc.net/b5ffac7e-7db4-4d54-bf2b-63ac7d6807d8/-/preview/

이러한 선이 세 개 이상 그어지는 순간 “빙고”라고 외치는데, 가장 먼저 외치는 사람이 게임의 승자가 된다.

https://upload.acmicpc.net/f86e3bcc-54da-420a-8f06-9600cb06eeaa/-/preview/

철수는 친구들과 빙고 게임을 하고 있다. 철수가 빙고판에 쓴 수들과 사회자가 부르는 수의 순서가 주어질 때, 사회자가 몇 번째 수를 부른 후 철수가 “빙고”를 외치게 되는지를 출력하는 프로그램을 작성하시오.

Untitled

나의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
binggo=[list(map(int,input().split())) for _ in range(5)]
count=1
for _ in range(5):
    anoun=list(map(int,input().split()))
    bre_pro=0
    for a in anoun:
        bing=0
        bre_for=0
        for i in range(5):
            for j in range(5):
                if binggo[i][j]==a:
                    binggo[i][j]=-1
                    bre_for=1
                    break
            if bre_for==1:
                break
        r_s=0
        l_s=0
        for k in range(5):
            if sum(binggo[k])==-5:
                bing+=1
            column=0
            for q in range(5):
                column+=binggo[q][k]
            if column==-5:
                bing+=1
            r_s+=binggo[k][k]
            l_s+=binggo[k][4-k]
        if r_s==-5:
            bing+=1
        if l_s==-5:
            bing+=1
        if bing>=3:
            print(count)
            bre_pro=1
            break
        count+=1
    if bre_pro==1:
        break
  • 빙고판이 5x5밖에 되지 않기 때문에, 사회자가 숫자를 부를 때마다 빙고판을 확인하여 3개 이상의 줄이 만들어지는지 확인했다.
  • 빙고가 나올 수 있는 경우는 ‘가로’, ‘세로’, ‘대각선’ 총 12개이다. 따라서 12개 경우를 모두 확인하여 연속해서 나오는 줄이 3개 이상일 경우 출력하도록 코드를 짰다.

주의)

1
2
3
4
5
        for k in range(5):
            if sum(binggo[k])==-5:
                bing+=1
            if sum(binggo[:][k])==-5:
                bing+=1
  • column의 수를 모두 더해서 확인하려고 했는데, 파이썬 list에서는 되지 않는다. 따라서 for문으로 처리해주어야 한다.
This post is licensed under CC BY 4.0 by the author.