https://www.acmicpc.net/problem/2578
풀이
bingo = [list(map(int, input().split())) for _ in range(5)]
nums = list(map(int, input().split()))
for _ in range(4):
nums += list(map(int, input().split()))
dr = [1, 1]
dc = [1, -1]
def func():
count = 0
for num in nums:
for i in range(5):
for j in range(5):
bingo_sum = 0
if num == bingo[i][j]:
bingo[i][j] = 0
count += 1
for k in range(5):
r_num = 0
for l in range(5):
if bingo[k][l] != 0:
break
else:
if bingo[k][l] == 0:
r_num += 1
if r_num == 5:
bingo_sum += 1
if bingo_sum == 3:
return count
for l in range(5):
c_num = 0
for k in range(5):
if bingo[k][l] != 0:
break
else:
if bingo[k][l] == 0:
c_num += 1
if c_num == 5:
bingo_sum += 1
if bingo_sum == 3:
return count
r = c = 0
if bingo[r][c] == 0:
cross1 = 0
for k in range(5):
nr, nc = r + dr[0]*k, c + dc[0]*k
if bingo[nr][nc] == 0:
cross1 += 1
if cross1 == 5:
bingo_sum += 1
if bingo_sum == 3:
return count
r, c = 0, 4
if bingo[r][c] == 0:
cross2 = 0
for k in range(5):
nr, nc = r + dr[1]*k, c + dc[1]*k
if bingo[nr][nc] == 0:
cross2 += 1
if cross2 == 5:
bingo_sum += 1
if bingo_sum == 3:
return count
print(func())
해석 및 후기
어렵게 풀었다.. 이렇게 코드 길게 쳐본 것 오랜만이다..
일단 사회자가 말하면 count를 1씩 더해준다.
그리고 해당 빙고 칸을 0으로 바꾸고
행 탐색, 열 탐색, 교차 2번 탐색하고, 매번 탐색할 때마다 bingo_num이 3인지 확인한다.
쉽게 풀어볼 방법을 생각해봐야겠다.
'백준' 카테고리의 다른 글
백준 10163 색종이 (파이썬) (0) | 2022.08.28 |
---|---|
백준 10157 자리배정 (파이썬) (0) | 2022.08.28 |
백준 1244 스위치 켜고 끄기 (파이썬, 자바) (0) | 2022.08.28 |
백준 2635 수 이어가기 (파이썬) (0) | 2022.08.23 |
백준 1330 두 수 비교하기 (파이썬) (0) | 2022.08.07 |