알고리즘 빙고 문제

문제 해결 과정

  1. 숫자를 지울 수 있어야 한다.
  2. 몇 줄이 완성되었는가?

어려웠던 점

  1. 몇 줄이 완성되었는지를 어떻게 카운트할것인가?
    숫자를 지우는 것까지는 구현할 수 있을거 같은데 몇줄이 완성되었는지 어떻게 카운트할지는 감이 안잡혔음.
if data[0][0]==-1 && data[0][1]=-1 ...data[0][4]=-1

만약 불려진 수를 -1로 바꾼다고 하면 위와 같은 반복문을 가로 5번 + 세로 5번 + 대각선 2번 반복하면 될거 같지만 너무 비효율적일거 같음.
-> 3중 반복문을 사용해서 숫자 하나가 불릴때마다 빙고인지 확인한다.

코드

arr=[]
numList=[]
result=0
bingo=0

for _ in range(5):
  arr.append(list(map(int,input().split())))
  
for _ in range(5):
  numList+=list(map(int,input().split()))
  
for k in range(len(numList)):
  for i in range(5):
    for j in range(5):
      bingo=0
      if arr[i][j]==numList[k]:
        arr[i][j]=-1
        result+=1
        
        for m in range(5):
          if arr[m][0]==-1 and arr[m][1]==-1 and arr[m][2]==-1 and arr[m][3]==-1 and arr[m][4]==-1:
            bingo+=1
          
        for m in range(5):
          if arr[0][m]==-1 and arr[1][m]==-1 and arr[2][m]==-1 and arr[3][m]==-1 and arr[4][m]==-1:
            bingo+=1
          
        if arr[0][0]==-1 and arr[1][1]==-1 and arr[2][2]==-1 and arr[3][3]==-1 and arr[4][4]==-1:
          bingo+=1 
      
        if arr[0][4]==-1 and arr[1][3]==-1 and arr[2][2]==-1 and arr[3][1]==-1 and arr[4][0]==-1:
          bingo+=1
        
        if bingo>=3:
          print(result)
          exit()

좋은 웹페이지 즐겨찾기