본문 바로가기
Problem Solving/BOJ

[BOJ][Python]2578번 풀이

by NoiB 2022. 7. 7.
반응형

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

 

2578번: 빙고

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

www.acmicpc.net

import sys
ssr = sys.stdin.readline

def sol():
    for i in range(5):
        for j in range(5):
            for k in range(5):
                for l in range(5):
                    if t[k][l] == n[i][j]:
                        check[k] += 1
                        check[l+5] += 1
                        if k+l == 4:
                            check[11] += 1
                        if k==l:
                            check[10] += 1
                        if check.count(5) >= 3:
                            print((i)*5+j+1)
                            return

t = [list(map(int, ssr().split())) for _ in range(5)]
n = [list(map(int, ssr().split())) for _ in range(5)]
check = [0,0,0,0,0,0,0,0,0,0,0,0]
sol()

어려운 문제는 아닙니다만 어떻게 하면 최적화를 할까 고민을 하느라 빨리 못풀었던 문제입니다. 구현 방법은 보자마자 떠올랐는데 개인적으로 반복문이 3개가 넘어가는 순간부터 거부감이 확 들어서 좋은 방법이 없나 고민하다보니 좀 늦었네요. 아직은 이걸 해결할 방법을 떠올릴 만큼 제가 성장하진 않았다는 뜻이겠죠. 플래티넘이나 다이아몬드를 찍은 다음 보면 어떤 풀이를 내놓을지 기대가 됩니다.

 

문제 접근은 굳이 이렇게 안하셔도 상관없을 것 같습니다. 어차피 불러주는 숫자는 5개씩 끊어서 들어오니 굳이 빙고판과 동일하게 이차원 배열로 구성하지 않아도 상관없을 것 같아요. 또한 생각해보면 5^4라서 최대 반복수가 625번밖에 안되기 때문에 굳이 break를 해야할 필요도 없을 것 같아요. 문제의 핵심은 빙고가 되는 것을 판단하는 것이기 때문에 굳이 dfs나 bfs를 해야할 것 같지는 않아서 리스트를 하나 만든다음 가로줄은 0~4번 요소, 세로줄은 5~9번 요소, 대각선은 10,11요소라고 정해놓고 해당 리스트에서 5의 갯수를 원소가 추가될 때마다 검사하는 방식으로 구현했습니다.

반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ][Python]5430번 풀이  (0) 2022.07.09
[BOJ][Python]11403번 풀이  (0) 2022.07.08
[BOJ][Python]11286번 풀이  (0) 2022.07.07
[BOJ][Python]6064번 풀이  (0) 2022.07.06