CodeClover

[JAVA] 백준 2578_빙고 본문

코딩테스트

[JAVA] 백준 2578_빙고

coding dew 2025. 1. 13. 23:52

 

[문제링크]

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

 

📌 문제 탐색하기

5x5 크기의 빙고판에 숫자 1-25가 랜덤으로 적혀있는데, 사회자가 숫자를 하나씩 부르면 불린 숫자를 지워나간다.

가로, 세로, 대각선의 숫자 5개가 모두 지워지면 그 줄은 빙고! 빙고가 3개 이상이면 게임 완료.

이때, 사회자가 몇번째 숫자를 불렀을때 빙고가 3빙고가 완성되는지 출력하는 문제이다.

 

📌 가능한 시간복잡도

....음... 

 

📌 코드 설계하기

 

 

📌 정답 코드

import sys

# 1. 문제의 입력을 받습니다.
# 1-1. 빙고판을 입력 받습니다.
arr = []
for _ in range(5):
    arr.append(sys.stdin.readline().split())

# 1-2. 2차원배열로 입력되는 사회자가 부르는 수를 하나의 list에 담습니다.
num = []
for _ in range(5):
    list = sys.stdin.readline().split()
    for i in list:
        num.append(i)

# 2. 빙고판을 초기화 합니다.
check_board = [[False for _ in range(5)] for _ in range(5)]


# 3. 빙고 수를 체크할 수 있는 함수를 구현합니다.

# 3-1. 빙고 row 수를 확인하기 위한 함수를 구현합니다.
def check_row_bingo():
    count = 0
    for i in range(5):
        is_bingo = True
        for j in range(5):
            if not check_board[i][j]:
                is_bingo = False
                break
        if is_bingo:
            count += 1
    return count

# 3-2. 빙고 column 수를 확인하기 위한 함수를 구현합니다.
def check_column_bingo():
    count = 0
    for j in range(5):
        is_bingo = True
        for i in range(5):
            if not check_board[i][j]:
                is_bingo = False
                break
        if is_bingo:
            count += 1
    return count


# 3-3. 대각선 빙고 수를 확인하기 위한 함수를 구현합니다.
def check_diagonal_bingo():
    count = 0
    # \ 모양 대각선
    is_bingo = True
    for i in range(5):
        if not check_board[i][i]:
            is_bingo = False
            break;
    if is_bingo:
        count += 1

    # / 모양 대각선
    is_bingo = True
    for i in range(5):
        if not check_board[i][4 - i]:
            is_bingo = False
            break
    if is_bingo:
        count += 1

    return count

# 4. 사회자가 부르는 각 수에 대해 빙고판을 True로 체크하고, 만족하는 빙고의 수를 확인합니다.
for i in range(25):
    now_num = num[i]
    # 4-1. 사회자가 부른 숫자의 빙고판 위치를 확인하고, 그 위치를 True로 표기합니다.
    for x in range(5):
        for y in range(5):
            if arr[x][y] == now_num:
                check_board[x][y] = True
    # 4-2. 빙고판을 True로 체크한 이후 빙고가 몇개 완성되었는지 확인합니다.
    count = check_row_bingo() + check_column_bingo() + check_diagonal_bingo()
    # 5. 완성된 빙고의 개수가 3개 이상이라면 해당 순서를 출력하고 탈출합니다.
    if count >= 3:
        print(i+1)
        break

'코딩테스트' 카테고리의 다른 글

[JAVA] 백준 2775_부녀회장이 될테야  (0) 2025.01.15
[JAVA] 백준 2748_피보나치 수 2  (3) 2025.01.14
[JAVA] 백준 7568_덩치  (1) 2025.01.12
[JAVA] 백준 2947_나무 조각  (0) 2025.01.11
[JAVA] 백준 25305_커트라인  (1) 2025.01.10