빙고
1 초 | 128 MB | 8628 | 3984 | 3361 | 46.590% |
문제
빙고 게임은 다음과 같은 방식으로 이루어진다.
먼저 아래와 같이 25개의 칸으로 이루어진 빙고판에 1부터 25까지 자연수를 한 칸에 하나씩 쓴다
다음은 사회자가 부르는 수를 차례로 지워나간다. 예를 들어 5, 10, 7이 불렸다면 이 세 수를 지운 뒤 빙고판의 모습은 다음과 같다.
차례로 수를 지워가다가 같은 가로줄, 세로줄 또는 대각선 위에 있는 5개의 모든 수가 지워지는 경우 그 줄에 선을 긋는다.
이러한 선이 세 개 이상 그어지는 순간 "빙고"라고 외치는데, 가장 먼저 외치는 사람이 게임의 승자가 된다.
철수는 친구들과 빙고 게임을 하고 있다. 철수가 빙고판에 쓴 수들과 사회자가 부르는 수의 순서가 주어질 때, 사회자가 몇 번째 수를 부른 후 철수가 "빙고"를 외치게 되는지를 출력하는 프로그램을 작성하시오.
입력
첫째 줄부터 다섯째 줄까지 빙고판에 쓰여진 수가 가장 위 가로줄부터 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 여섯째 줄부터 열째 줄까지 사회자가 부르는 수가 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 빙고판에 쓰여진 수와 사회자가 부르는 수는 각각 1부터 25까지의 수가 한 번씩 사용된다.
출력
첫째 줄에 사회자가 몇 번째 수를 부른 후 철수가 "빙고"를 외치게 되는지 출력한다.
풀이
빙고판의 숫자들을 배열 안에 집어넣고 사회자가 부르는 숫자들을 입력하며 빙고인지 아닌지 매번 체크합니다.
방법
여러가지 방법 중 크게 두 가지로 나눌 수 있습니다
1) 매번 빙고판 전체에서 빙고가 몇 개인지 판별
2) 새로 빙고를 체크한 곳을 기준으로 빙고 개수를 추가해 나감
주의점들
1) 숫자 하나를 놨는데 빙고가 한 번에 두 개가 추가되는 경우 ( 빙고가 3을 거치지 않고 4가 될 수 있음에 주의)
2) 완전 정중앙 점에 놓을 때 → 한 번에 4개의 빙고가 생길 수 있습니다. 대각선(2), 가로, 세로
3) 빙고를 중복 탐색해서 개수를 여러번 세는 것을 주의합니다
bingo = []
for i in range(5):
bingo.append(list(map(int,input().split())))
call = []
for i in range(5):
call.extend(list(map(int,input().split())))
# 숫자를 넣으면 숫자 위치를 찾고 그 숫자를 기준으로 빙고가 만들어지는지 판별
def check(number):
row = col = 0
for i in range(5):
for j in range(5):
if number == bingo[i][j]:
bingo[i][j] = 0
row, col = i, j
break
garo = sero = 1
for i in range(5):
if bingo[row][i] != 0:
sero = 0
break
for j in range(5):
if bingo[j][col] != 0:
garo = 0
break
daegack = 0
if row == col:
daegack += 1
for i in range(5):
if bingo[i][i] != 0:
daegack -= 1
break
if row + col == 4:
daegack += 1
for i in range(5):
if bingo[i][4-i] != 0:
daegack -= 1
break
return garo+sero+daegack
count = 0
for i in range(25):
if count >= 3: # 3을 건너뛰고 4개이상의 빙고가 생길 수 있음
print(i)
break
# 새로 만들어지는 빙고수만큼 count에 추가
count += check(call[i])
'Study > Baekjoon' 카테고리의 다른 글
[Python] Baekjoon2527: 직사각형 (0) | 2022.01.30 |
---|---|
[Python] Baekjoon2477: 참외밭 (0) | 2022.01.30 |
[Python] Baekjoon2559: 수열 (0) | 2022.01.29 |
[Python] Baekjoon2304: 창고 다각형 (0) | 2022.01.29 |
[Python] Baekjoon2529: 부등호 (0) | 2022.01.28 |