홍우진의 개발 일기장

[백준] 2578번: 빙고/ 파이썬 본문

알고리즘/백준

[백준] 2578번: 빙고/ 파이썬

홍우진 2022. 8. 1. 22:45
728x90
반응형

문제 링크


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

 

2578번: 빙고

첫째 줄부터 다섯째 줄까지 빙고판에 쓰여진 수가 가장 위 가로줄부터 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 여섯째 줄부터 열째 줄까지 사회자가 부르는 수가 차례대로

www.acmicpc.net

 

풀이 코드


import sys
input = sys.stdin.readline

board = {}
check = [[0]*5 for i in range(5)]
for i in range(5):
    a = list(map(int,input().split()))
    for j in range(5):
        board[a[j]] = (i,j)

tick = 0

for _ in range(5):
    a = list(map(int,input().split()))
    for i in range(5):
        tick += 1
        
        if a[i] in board:
            check[board[a[i]][0]][board[a[i]][1]] = 1
            bingo = 0

            for j in range(5):
                if sum(check[j]) == 5:
                    bingo+=1
                if sum([k[j] for k in check]) == 5:
                    bingo+=1

            if check[0][4]+check[1][3]+check[2][2]+check[3][1]+check[4][0] == 5:
                bingo+=1

            if check[0][0]+check[1][1]+check[2][2]+check[3][3]+check[4][4] == 5:
                bingo+=1
                
            if bingo >= 3:
                print(tick)
                sys.exit()

코드 해석


우선 0으로 이루어진 5x5 체스판을 만든다.

그리고 딕셔너리에 각 수를 저장한 후 value에 좌표를 매치하여 저장한다.

 

사회자가 부르는 숫자를 입력 받은 뒤

불린 숫자가 보드에 있을 경우에 딕셔너리를 이용하여 기록한다.

 

그 후 빙고를 세주고 만약 빙고가 3개 이상이라면 출력 후 종료한다.

728x90
반응형
Comments