알고리즘 공부/파이썬(Python)

백준 2578번 빙고 파이썬

마달랭 2024. 6. 25. 13:50
반응형

리뷰

구현 문제는 너무 어렵고 오래걸린다.

문제 풀이

우선 빙고판과 숫자판 그리고 순서 인덱스를 초기화 해준다. for문이 많이 발생할 것으로 예상되어 함수를 사용해 주었다.

  • call_number 함수 : 리스트와 숫자를 받아와 해당 리스트에서 동일한 숫자 발견 시 해당 숫자를 0으로 바꾸고 리턴
  • check_bingo 함수 : 행과 열, 대각선의 숫자가 모두 0인지 체크 후 빙고의 갯수 리턴

매번 번호 호출 시마다 순서를 증가시켜 주고 빙고판에서 해당 숫자를 0으로 만들어 준 뒤 빙고의 숫자가 3개 이상이 될 경우 번호를 출력 하고 리턴하는 것으로 마무리 하였다.

참고 사항

for문이 많아 함수를 사용하는 것을 추천한다.

정답 코드

def q2578():
    # 백준 2578번 빙고 파이썬
    def call_number(board, number):
        for i in range(5):
            for j in range(5):
                if board[i][j] == number:
                    board[i][j] = 0
                    return

    def check_bingo(board):
        bingo_cnt = 0
        for row in board:
            if all(i == 0 for i in row):
                bingo_cnt += 1
        for col in range(5):
            if all(board[row][col] == 0 for row in range(5)):
                bingo_cnt += 1
        if all(board[i][i] == 0 for i in range(5)):
            bingo_cnt += 1
        if all(board[i][4 - i] == 0 for i in range(5)):
            bingo_cnt += 1
        return bingo_cnt

    lst1 = [list(map(int, input().split())) for _ in range(5)]
    lst2 = [list(map(int, input().split())) for _ in range(5)]
    cnt = 0

    for i in range(5):
        for j in range(5):
            cnt += 1
            call_number(lst1, lst2[i][j])
            chk = check_bingo(lst1)
            if chk >= 3:
                print(cnt)
                return
q2578()

 

728x90
반응형