이론상 둘 씩 세 곳이 겹칠 수 있으므로 12개 칠했을 때부터 3 빙고가 가능합니다.
근데 나는 세 개가 동시에 교차하는 경우만 두 개 검토하고서 13개부터 가능하다고 풀이를 작성해나갔기 때문입니다.
이번 것은 엣지 케이스를 잘 검토하지 않고 구현부터 한 것이 시간을 잡아먹은 원인이었습니다. 시간 더 쓰더라도 요구사항 & 엣지 정확히 정립하고 넘어가는 것을 추천합니다. 나중에 어디서 문제생겼나 디버깅하는게 더 걸린다고 생각합니다.
채점 프로그램이 종료되기 때문입니다.
flag를 주든 해서 return 시키면 됩니다.
import sys
input = sys.stdin.readline
my = dict()
official = [False] * 26
def findBingo():
ans = 0
for y in range(5):
cnt = 0
for x in range(5):
if not official[y*5 + x]: # 가로
break
cnt += 1
if cnt == 5:
ans += 1
for y in range(5):
cnt = 0
for x in range(5):
if not official[x*5 + y]: # 세로
break
cnt += 1
if cnt == 5:
ans += 1
cnt = 0
for y in range(5):
if not official[y*5 + y]: # 대각
break
cnt += 1
if cnt == 5:
ans += 1
cnt = 0
for y in range(5):
if not official[y*5 + 4-y]: #역대각
break
cnt += 1
if cnt == 5:
ans += 1
return ans
i = 0
for _ in range(5):
l = list(map(int, input().split()))
for num in l:
my[num] = i
i += 1
answer = 0
for _ in range(5):
l = list(map(int, input().split()))
for num in l:
idx = my[num]
official[idx] = True
answer += 1
if answer < 12:
continue
if findBingo() >= 3:
print(answer)
exit(0)