[백준][파이썬] 2578번. 빙고

문제

https://www.acmicpc.net/problem/2578

 

풀이

board = []
nums = []
for _ in range(5) :
  board.append(list(map(int, input().split())))
for _ in range(5) :
  nums.extend(list(map(int, input().split())))

check = [[0 for _ in range(5)] for _ in range(5)]  # 빙고 여부 체크용

# 가로 빙고 개수 체크
def row_bingo(check) :
  count = 0
  for row in check :
    if sum(row) == 5 :
      count += 1
  return count

# 세로 빙고 개수 체크
def col_bingo(check) :
  count = 0
  check_t = list(map(list, zip(*check)))
  for col in check_t :
    if sum(col) == 5 :
      count += 1
  return count

# 오른쪽 대각선 빙고 체크
def r_cross_bingo(check) :
  temp = 0
  for i in range(5) :
    temp += check[i][i]
  if temp == 5 :
    return 1
  return 0

# 왼쪽 대각선 빙고 체크
def l_cross_bingo(check) :
  temp = 0
  for i in range(5) :
    temp += check[i][5-i-1]
  if temp == 5 :
    return 1
  return 0

# 빙고 : 가로, 세로, 대각선
for idx, n in enumerate(nums) :
  for i in range(5) :
    for j in range(5) :
      if board[i][j] == n :
        check[i][j] = 1
  # 빙고 여부 확인하기
  if idx >= 4 :  # 숫자를 5개 미만으로 불렀을 때는 절대로 빙고를 외칠 수 없음
    count = row_bingo(check) + col_bingo(check) + r_cross_bingo(check) + l_cross_bingo(check)
    if count >= 3 :
      print(idx + 1)
      break
728x90