STUDY/Algorithm

[백준] 2578 빙고

sinawi95 2021. 2. 10. 10:28
728x90

www.acmicpc.net/problem/2578

import sys

def isbingo(_list):
    result = 0
    #1 가로 확인
    for i in range(5):
        for j in range(5):
            if not _list[i][j]:
                break
        else:
            result += 1

    #2 세로 확인
    for j in range(5):
        for i in range(5):
            if not _list[i][j]:
                break
        else:
            result += 1

    #3 대각선 확인
    for k in range(5): # 00,11,22,33,44
        if not _list[k][k]:
            break
    else:
        result += 1

    for k in range(5): #04,13,22,31,40
        if not _list[k][4-k]:
            break
    else:
        result += 1

    return result

input = sys.stdin.readline
#sys.stdin = open(".idea/inputs/2578_input1.txt")
my_bingo = []
bingo_seq = []
my_bingo_bool = [[False]*5 for i in range(5)]

for _ in range(5):
    my_bingo.append(list(map(int,input().split())))
for _ in range(5):
    bingo_seq.extend(list(map(int,input().split())))
cnt = 0
for seq in bingo_seq:
    cnt += 1
    break_chk = False
    for i in range(5):
        for j in range(5):
            if my_bingo[i][j] == seq:
                my_bingo_bool[i][j] = True
                break_chk = True
                break
        if break_chk:
            break

    if isbingo(my_bingo_bool)>2:
        break
print(cnt)

빙고를 체크하는 부분이 조금 길지만 2차원 배열로 받고 행과 열에서 각각 비교를했다.

비교를 할때는 false로 되어있는 같은 크기의 2차원배열을 선언해서 하나씩 부를때마다 True로 바꾸었고, 체크가 될때마다 빙고인지 확인했다.

체크된 줄이 세 개가 넘으면 반복문을 종료시켜서 몇번째가 되는지 출력한다.

처음에는 세줄일때만 확인했는데(if isbingo == 3), 한번의 체크로 두 줄 이상 완성될수도있어서 3 이상인지 확인 했다.

실버치고는 쉬운 문제이다.

'STUDY > Algorithm' 카테고리의 다른 글

[백준] 1244 스위치 켜고 끄기  (0) 2021.02.10
[백준] 2628 종이자르기  (0) 2021.02.10
[백준] 2615 오목  (0) 2021.02.09
[백준] 1011 Fly me to the Alpha Centauri  (0) 2021.02.07
[백준] 2839 설탕배달  (0) 2021.02.07