CodingTest/Baekjoon

[baekjoon] 백준 2578번(파이썬): 빙고

JunJangE 2022. 9. 1. 11:21

문제

 

2578번: 빙고

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

www.acmicpc.net

알고리즘

- 반복문을 통해 사회자가 외친 빙고 번호를 0으로 초기화

- 가로, 세로, 대각선이 빙고인지 확인 후 빙고이면 카운트

- 카운트한 빙고가 3개 이상이라면 빙고를 부른 횟수를 출력 후 시스템 종료

코드

import sys


def solve(target, graph):
    for i in range(5):
        for j in range(5):
            if target == graph[i][j]:
                graph[i][j] = 0
                return


def check(graph):
    cnt = 0
    for i in range(5):
        temp = 0
        for j in range(5):
            if graph[i][j] == 0:
                temp += 1
        if temp == 5:
            cnt += 1
    for i in range(5):
        temp = 0
        for j in range(5):
            if graph[j][i] == 0:
                temp += 1
        if temp == 5:
            cnt += 1

    if graph[0][4] == graph[1][3] == graph[2][2] == graph[3][1] == graph[4][0] == 0:
        cnt += 1
    if graph[0][0] == graph[1][1] == graph[2][2] == graph[3][3] == graph[4][4] == 0:
        cnt += 1

    return cnt


bingo = [list(map(int, sys.stdin.readline().split())) for _ in range(5)]
answer_bingo = [list(map(int, sys.stdin.readline().split())) for _ in range(5)]


answer = 0
for i in range(5):
    for j in range(5):
        answer += 1
        solve(answer_bingo[i][j], bingo)
        if check(bingo) >= 3:
            print(answer)
            exit()

github