[풀이]
from sys import stdin
from collections import deque
def bingo_find(i,j):
total = 0
#가로 찾기
for r in range(5):
if sum(visit[r][0:5]) == 5:
total += 1
#세로 찾기
for c in range(5):
col = 0
for r in range(5):
if visit[r][c] == 1:
col += 1
if col == 5:
total += 1
#대각선 찾기
right_down = left_down = 0
for i in range(5):
if visit[i][i] == 1:
right_down += 1
if visit[i][4-i] == 1:
left_down += 1
#전체 빙고 개수
if left_down == 5:
total += 1
elif right_down == 5:
total += 1
return total
positions = [0]*(26) #빙고판의 숫자별 위치 저장
for r in range(5):
tmp = list(map(int, stdin.readline().split()))
for c in range(5):
positions[tmp[c]] = ((r,c))
numbers =[] #사회자의 숫자들
for _ in range(5): #1차원 list로 받아오기
numbers += list(map(int,stdin.readline().split()))
numbers = deque(numbers)
cnt = 0 #사회자가 부른 숫자의 개수
visit =[[0]*5 for _ in range(5)] #숫자 불려지면 체크 용도
while numbers:
num = numbers.popleft()
cnt +=1
i,j = positions[num]
visit[i][j] = 1
if bingo_find(i,j) >= 3:
print(cnt)
break
99%인가? 실패해가지고 도대체 이유가 뭐지,,했는데 처음에 마지막 bingo를 확인하기 위해서 함수를 넣어주었을때 불러준 숫자의 개수가 13개 이상일때만 들어가게 했다. (3개이상 빙고가 생길려면 저 cnt가 최소라고 생각했음) 그걸 없애주니까 잘 돌아간다. 약간 무식하지만, 번호들은 하나의 큐 형태로 받아서 지속적으로 popleft를 해주어서 visit라는 함수에 방문 표시를 해준다. 그리고 그 이후에 함수를 전체적으로 돌려서 빙고수 확인!
'너와!나의!알고!리즘! > 백준' 카테고리의 다른 글
[백준 #1697,Python] 숨바꼭질 (0) | 2021.04.25 |
---|---|
[백준 #1463, Python] 1로 만들기 (0) | 2021.04.20 |
[백준 #1759, Python] 암호만들기 (0) | 2021.04.12 |
[백준 #7569, Python] 토마토 (0) | 2021.04.06 |
[백준 #2468, Python] 안전영역 (0) | 2021.04.06 |