반응형
https://www.acmicpc.net/problem/2578
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 |