본문 바로가기
🔅코딩테스트 공부🔅/❗백준

[백준] 2578번 빙고(python)

by 윤무무 2023. 4. 13.

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

 

2578번: 빙고

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

www.acmicpc.net

 

1. 난이도 실버 4

 

2. 내가 작성한 코드

구현 이 친구 문제를 풀 때 생각보다 시간이 오래걸린다.

 

아직 훈련이 덜 되어 있나 봄

 

bingo = [list(map(int, input().split())) for _ in range(5)] #최초의 빙고판
answer = []

for i in range(5): #answer을 1차원 배열로 입력 받기
    for j in input().split():
        answer.append(int(j))

def check():
    cnt=0

    for i in range(5): #가로 빙고 확인
        if bingo[i][:] == ["X","X","X","X","X"]:
            cnt+=1

    for i in range(5): #세로 빙고 확인
        if bingo[0][i] == "X" and bingo[1][i] == "X" and bingo[2][i] == "X" and bingo[3][i] == "X" and bingo[4][i] == "X":
            cnt+=1

	#대각선 빙고 확인1
    if bingo[0][0] == "X" and bingo[1][1] == "X" and bingo[2][2] == "X" and bingo[3][3] == "X" and bingo[4][4] == "X":
        cnt+=1

	#대각선 빙고 확인2
    if bingo[0][4] == "X" and  bingo[1][3] == "X" and  bingo[2][2] == "X" and  bingo[3][1] == "X" and  bingo[4][0] == "X":
        cnt+=1

    return cnt

for i in range(25):
    for k in range(5):
        for m in range(5): #사회자가 부른 숫자가 있으면 X표시
            if bingo[k][m] == answer[i]:
                bingo[k][m] = "X"
                if check() >= 3: #선의 개수가 3개 이상이면 정답 외치기
                    print(i+1)
                    exit()

 

메모

1. 빙고가 동시에 될 경우의 수를 빼고 문제를 풀어서 틀렸었다. check가 모두 x표친 선의 개수인데, 빙고가 됨과 동시에 3개 이상일 수도 있다.

 

2. 나는 answer과 bingo에 있는 수가 같은 경우 X를 쳐 줬는데 0으로 대체한 후 count나 sum 함수를 이용하면 더 쉽게 풀 수 있었을 것 같다.

댓글