풀이
5x5 빙고판에서 3개 이상의 빙고가 나왔을때의 순서를 출력하는 알고리즘을 작성해야한다.
주어진 입력값을 통해 빙고판과 사회자가 순서대로 부를 숫자를 리스트에 저장한다.
빙고의 규칙대로 세로, 가로, 대각선의 빙고여부 판단을 위한 함수가 필요하다.
총 4가지의 함수로 빙고여부 판단 기능을 구현했고 사회자가 숫자를 한 번 부를 때 마다 이 기능을 통해 3개 이상의 빙고가 나왔는지 확인해주면서 3개 이상의 빙고가 나올 경우 몇 번째 숫자인지 출력한 뒤 반복문을 탈출하면된다.
아래 주석처리된 코드를 통해 사회자의 숫자가 나올 때 마다의 빙고판 현황을 확인할 수 있다.
소스코드
import sys
input = sys.stdin.readline
def hor_cnt(bingo):
bng_cnt = 0
for b in bingo:
bng = 0
for i in b:
if i.isdigit():
bng = 0
break
else:
bng += 1
if bng != 0:
bng_cnt += 1
return bng_cnt
def ver_cnt(bingo):
bng_cnt = 0
for j in range(5):
bng = 0
for i in range(5):
if bingo[i][j].isdigit():
bng = 0
break
else:
bng += 1
if bng != 0:
bng_cnt += 1
return bng_cnt
def r_cnt(bingo):
bng_cnt = 0
r = [bingo[4][0], bingo[3][1], bingo[2][2], bingo[1][3], bingo[0][4]]
for i in r:
bng = 0
if i.isdigit():
bng = 0
break
else:
bng += 1
if bng != 0:
bng_cnt += 1
return bng_cnt
def l_cnt(bingo):
bng_cnt = 0
l = [bingo[0][0], bingo[1][1], bingo[2][2], bingo[3][3], bingo[4][4]]
for i in l:
bng = 0
if i.isdigit():
bng = 0
break
else:
bng += 1
if bng != 0:
bng_cnt += 1
return bng_cnt
bingo = [input().rstrip().split() for _ in range(5)]
nums = []
for _ in range(5):
for i in input().rstrip().split():
nums.append(i)
for n in range(25):
for i in range(5):
for j in range(5):
if bingo[i][j] == nums[n]:
bingo[i][j] = "O"
break
# for b in bingo:
# print(b)
# print(n, "---------------", hor_cnt(bingo), ver_cnt(bingo), r_cnt(bingo), l_cnt(bingo))
ttl = hor_cnt(bingo) + ver_cnt(bingo) + r_cnt(bingo) + l_cnt(bingo)
if ttl >= 3:
print(n+1)
break