Algorithm

[백준 2578] 빙고

moguogu 2024. 2. 10. 19:53

문제

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

 

2578번: 빙고

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

www.acmicpc.net

알고리즘

1. 사회자가 불러주는 수의 값을 체크 할 수 있도록 빙고판과 같은 크기의 배열을 생성한다

2. 사회자가 값을 부를 때 마다 체크 한다

3. 체크 한 값이 12 이상일 때 마다 행과열의 합을 구해서 각 한 줄 씩 빙고가 성립한지 확인한다

4. 3줄이상 달성했을 경우 센 횟수 값을 출력하며 종료한다

코드

import sys 
 
def Input_Data(): 
    readl = sys.stdin.readline 
    map_bingo = [list(map(int, readl().split())) for _ in range(5)] 
    seq_bingo = [list(map(int, readl().split())) for _ in range(5)] 
    for _ in range(5): 
        seq_bingo += list(map(int,readl().split()))     
    return map_bingo, seq_bingo 
#빙고 판에 체크하는 함수     
def dis(cur):
    for i in range(5):
        for j in range(5):
            if map_bingo[i][j] == cur:
                return i,j
#빙고가 성립하는지 확인하는 함수
def check():
    row_cnt=0   
    for i in range(5): #행의 합 구하기
        if sum(visited[i]) == 5:
            row_cnt+=1
        if sum((list(map(list, zip(*visited))))[i]) == 5: #열의 합 구하기
            row_cnt+=1
    sum1,sum2 = 0,0
    for i in range(5): 
        sum1 += visited[i][i]
        sum2 += visited[i][4-i]       
    if sum1 == 5:
        row_cnt+=1
    if sum2 == 5:
        row_cnt+=1   
    if row_cnt >=3: #빙고 성공
        return True
    else: 
        return False
                
def Solve(): 
    cnt = 0
    newlist = []
    for i in range(5):
        for j in range(5):
            cur = seq_bingo[i][j] #사회자가 부르는 수의 값을 가져온다
            x,y = dis(cur)#빙고판에 그 값을 체크한다
            visited[x][y] = 1 #방문여부 체크
            cnt+=1 #색칠한 칸 수 확인
            if cnt>=12:#최소 12칸은 넘어야 빙고가 성립하므로            
                if check():#그것보다 클때 빙고 여부 확인
                    return cnt
 
sol = 0
visited = [[0]*(5) for _ in range(5)]
map_bingo, seq_bingo = Input_Data() 
sol = Solve()
print(sol)

고찰

조건대로 구현만 하면 패스할 수 있는 문제였다

'Algorithm' 카테고리의 다른 글

[백준 1068] 트리  (0) 2024.08.21
[백준 10026] 적록색약  (2) 2024.07.24
[백준 2583] 영역 구하기  (1) 2024.02.04
[백준 6236] 용돈 관리  (0) 2024.01.31
[백준 3055] 탈출  (1) 2024.01.31