https://www.acmicpc.net/problem/2578
#빙고 성공 여부 리턴
def check_bingo(bingo):
bingo_cnt = 0
calc_2, calc_3 = 0, 0
for idx in range(5):
#가로
if sum(bingo[idx]) == 0 :
bingo_cnt += 1
#세로
calc_1 = 0
for idx2 in range(5):
calc_1 += bingo[idx2][idx]
if calc_1 == 0 :
bingo_cnt += 1
#대각선
calc_2 += bingo[idx][idx]
calc_3 += bingo[idx][4-idx]
if calc_2 == 0 :
bingo_cnt += 1
if calc_3 == 0 :
bingo_cnt += 1
#세 줄 이상인 경우, True를 리턴
if bingo_cnt >= 3 :
return True
else :
return False
#빙고 진행 상황
def bingo_sequence(bingo):
#몇 개 불렀는지 저장하는 변수 cnt
cnt = 0
for _ in range(5):
#사회자가 부르는 숫자들을 받아옴
check_list = list(map(int,input().split()))
for num in check_list:
#해당 번호의 위치를 확인하는 과정
for idx in range(5):
if num in bingo[idx]:
#찾은 숫자는 0으로 바꿔줌
bingo[idx][bingo[idx].index(num)] = 0
cnt += 1
#빙고 완성된 경우 그 당시의 cnt값 리턴
if cnt > 11 and check_bingo(bingo):
return cnt
bingo = []
#배열 생성
for _ in range(5):
bingo.append(list(map(int,input().split())))
print(bingo_sequence(bingo))
bingo_sequence
: 빙고를 진행하는 함수check_bingo
: 빙고가 몇 줄 있는지 확인하고, 3줄 이상인 경우 True를 리턴더 짧게 효율적인 방법으로 구성하고 싶었는데, 생각보다 복잡하게 구현된 것 같다. 여전히 코드가 투박한 것 같다..