def bingo(board) : 빙고판이 몇 줄 지워졌는지 체크하는 메서드 생성. 가로 / 세로 / 대각선 두 가지 케이스, 총 4개의 케이스에 대해 몇 줄이 지워졌는지 카운트하여 저장한다. 이 때 cnt 값이 누적되지 않도록꼭 bingo 메서드가 호출될 때 마다 cnt 값이 초기화 될 수 있도록 작성한다.
board = [] #빙고판
call_temp = [] #사회자가 부른 번호(임시)
for _ in range(5):
board.append(list(map(int, input().split())))
for _ in range(5):
call_temp.append(list(map(int, input().split())))
call = []
#사회자가 부른 번호 2차원 리스트를 1차원 리스트로 변환
for i in range(5):
for j in range(5):
call.append(call_temp[i][j])
#빙고판이 몇줄 지워졌는지 체크하는 메서드 작성
def bingo(board):
global cnt
cnt = 0 #메서드가 수행될때마다 카운트 값을 반드시 초기화
for i in range(5):
if board[i][0] == board[i][1] == board[i][2] == board[i][3] \
== board[i][4] == 0:
cnt += 1
else:
continue
for j in range(5):
if board[0][j] == board[1][j] == board[2][j] == board[3][j] \
== board[4][j] == 0:
cnt += 1
else:
continue
if board[0][0] == board[1][1] == board[2][2] == board[3][3] \
== board[4][4] == 0:
cnt += 1
if board[4][0] == board[3][1] == board[2][2] == board[1][3] \
== board[0][4] == 0:
cnt += 1
#사회자가 부른 번호를 지우는 for문 작성
for k in range(len(call)-1):
for i in range(5):
for j in range(5):
if board[i][j] == call[k]:
board[i][j] = 0
bingo(board) #사회자가 번호를 부를 때마다 몇 줄이 지워졌는지 카운트하는 메서드 동작
if cnt >= 3:
print(k+1)
break
다른 코드 및 설명
for _ in range(5): mc += list(map(int, input().split())) => 2차원 리스트를 1차원 리스트로 변환시킬 때, 나는 고민 끝에 새로운 리스트를 선언하고, 그 안에 2차원 리스트의 값을 for문을 통해 저장하였다. 하지만, 리스트와 리스트를 <+> 연산 해주면 리스트의 요소가 추가된다는 점을 이용하여, 위 코드와 같이 작성하였다.
for i in range(5): y = 0 for j in range(5): if c[j][i] == 0: y += 1 if y == 5: bingo += 1 => 세로의 값만 한 줄씩 확인하고 싶을 때 나는 일일이 확인하는 코드를 작성하였다. (2중 for문으로 작성할 방법을 생각하지 못했다.) 하지만 바깥의 for문을 작성 후 변수 y를 초기화하고, for문 안의 for문을 수행 시 if문을 만족한다면 y를 하나씩 증가시키고, y가 바깥에 수행했던 for문의 최대 범위와 같다면, bingo 값을 하나씩 더해주는 방법으로 작성이 가능하다.
import sys
c = [list(map(int, input().split())) for _ in range(5)]
mc = []
for _ in range(5):
mc += list(map(int, input().split()))
print(mc)
def check():
#가로 확인
for x in c:
if x.count(0) == 5:
bingo += 1
#세로 확인
for i in range(5):
y = 0
for j in range(5):
if c[j][i] == 0:
y += 1
if y == 5:
bingo += 1
#왼쪽 위부터 시작하는 대각선 확인
d1 = 0
for i in range(5):
if c[i][i] == 0:
d1 += 1
if d1 == 5:
bingo += 1
#오른쪽 위부터 시작하는 대각선 확인
d2 = 0
for i in range(5):
if c[i][4-i] == 0:
d2 += 1
if d2 == 5:
bingo += 1
return bingo #지워진 줄이 몇 줄인지 체크하고 리턴한다.
cnt = 0
for i in range(25):
for x in range(5):
for y in range(5):
if mc[i] == c[x][y]:
c[x][y] = 0
cnt += 1
if cnt >= 12:
result = check()
if result >= 3:
print(i + 1)
break