백준 2578 - 빙고
입력
첫째 줄부터 다섯째 줄까지 빙고판에 쓰여진 수가 가장 위 가로줄부터 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 여섯째 줄부터 열째 줄까지 사회자가 부르는 수가 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 빙고판에 쓰여진 수와 사회자가 부르는 수는 각각 1부터 25까지의 수가 한 번씩 사용된다.
출력
첫째 줄에 사회자가 몇 번째 수를 부른 후 철수가 “빙고”를 외치게 되는지 출력한다.
깔끔한 방법이 있는지 궁금했지만, 다들 주어진 조건대로 우직하게 풀더라.
빙고 여부를 가려내는 함수를 구현한 뒤 조건을 대입하는 식으로 구현. 그런데, 빙고 여부를 가려내는 함수가 제대로 작동 안 하는지, 한참을 헤맸다.
def isBingo(arr):
cnt = 0
# 가로 빙고 여부 확인
for l in arr:
if l.count(0) == 5:
cnt += 1
# 세로 확인
for i in range(5):
y = 0
for j in range(5):
if arr[j][i] == 0:
y += 1
if y == 5:
cnt += 1
# 대각선(\) 확인
k = 0
for i in range(5):
if arr[i][i] == 0:
k += 1
if k == 5:
cnt += 1
# 대각선(/) 확인
u = 0
for i in range(5):
if arr[i][4-i] == 0:
u += 1
if u == 5:
cnt += 1
return cnt
bingo = [] # 빙고판
tutor = [] # 하나씩 부를 숫자
for _ in range(5):
b = list(map(int, input().split()))
bingo.append(b)
for i in range(5):
w = list(map(int, input().split()))
for j in w:
tutor.append(j)
for idx, num in enumerate(tutor):
for m in bingo: # 첫 번째 줄부터 차례로 체크
if num in m: # 부르는 숫자가 해당 줄에 있으면
m[m.index(num)] = 0 # 숫자를 0으로 변환
break
res = isBingo(bingo) # 맞은 줄이 몇 개인지 확인
if res >= 3:
print(idx+1)
break
[문제 보기]
비슷한 문제 : 틱! 택! 토!