[백준] 2578 빙고

cheeeese·2022년 5월 11일
0

코딩테스트 연습

목록 보기
103/151
post-thumbnail

📖 문제

https://www.acmicpc.net/problem/2578

💻 내 코드

import sys

def isBingo(arr):
    cnt=0
    for l in arr:
        if l.count(0)==5:
            cnt+=1
    for i in range(5):
        y=0
        for j in range(5):
            if arr[j][i]==0:
                y+=1
        if y==5:
            cnt+=1
    k=0
    for i in range(5):
        if arr[i][i]==0:
            k+=1
    if k==5:
        cnt+=1
    u=0
    for i in range(5):
        if arr[i][4-i]==0:
            u+=1
    if u==5:
        cnt+=1
    return cnt

bingo=[]
for i in range(5):
    bingo.append(list(map(int, sys.stdin.readline().split())))
    

cal=[]
for i in range(5):
    cal+=list(map(int, sys.stdin.readline().split()))
   
for c in cal:
    for b in bingo:
        if c in b:
            b[b.index(c)]=0

            break
        else:
            continue

    res=isBingo(bingo)
    if res>=3:
        print(cal.index(c)+1)
        break

💡 풀이

  • 사회자가 부르는 수는 이차원 리스트가 아니라 일차원으로 저장함
  • 빙고가 있는지 확인하는 함수 isBingo (다른 사람 코드 참고함)
def isBingo(arr):
    cnt=0
    
    # 가로 빙고 확인
    for l in arr:
        if l.count(0)==5:
            cnt+=1
            
    # 세로 빙고 확인
    for i in range(5):
        y=0
        for j in range(5):
            if arr[j][i]==0:
                y+=1
        if y==5:
            cnt+=1
    # 좌상향 대각선 빙고 확인
    k=0
    for i in range(5):
        if arr[i][i]==0:
            k+=1
    if k==5:
        cnt+=1
        
    # 우상향 빙고 확인
    u=0
    for i in range(5):
        if arr[i][4-i]==0:
            u+=1
    if u==5:
        cnt+=1
    return cnt

0개의 댓글