[백준] 2578_빙고 python
빙고
문제
빙고 게임은 다음과 같은 방식으로 이루어진다.
먼저 아래와 같이 25개의 칸으로 이루어진 빙고판에 1부터 25까지 자연수를 한 칸에 하나씩 쓴다
다음은 사회자가 부르는 수를 차례로 지워나간다. 예를 들어 5, 10, 7이 불렸다면 이 세 수를 지운 뒤 빙고판의 모습은 다음과 같다.
차례로 수를 지워가다가 같은 가로줄, 세로줄 또는 대각선 위에 있는 5개의 모든 수가 지워지는 경우 그 줄에 선을 긋는다.
이러한 선이 세 개 이상 그어지는 순간 "빙고"라고 외치는데, 가장 먼저 외치는 사람이 게임의 승자가 된다.
철수는 친구들과 빙고 게임을 하고 있다. 철수가 빙고판에 쓴 수들과 사회자가 부르는 수의 순서가 주어질 때, 사회자가 몇 번째 수를 부른 후 철수가 "빙고"를 외치게 되는지를 출력하는 프로그램을 작성하시오.
입력
첫째 줄부터 다섯째 줄까지 빙고판에 쓰여진 수가 가장 위 가로줄부터 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 여섯째 줄부터 열째 줄까지 사회자가 부르는 수가 차례대로 한 줄에 다섯 개씩 빈 칸을 사이에 두고 주어진다. 빙고판에 쓰여진 수와 사회자가 부르는 수는 각각 1부터 25까지의 수가 한 번씩 사용된다.
출력
첫째 줄에 사회자가 몇 번째 수를 부른 후 철수가 "빙고"를 외치게 되는지 출력한다.
해결방법
- 빙고판을 받아온 후 빙고가 되는 경우의 수 12가지를 미리 파악한다.
- 가로빙고, 세로빙고(행렬 전환 후 가로 고려), 대각선 빙고
- 숫자와 빙고판을 돌면서 숫자가 선언되면 빙고판에서 숫자를 삭제한다.
- 빙고판이 빈리스트가 되면 cnt를 1 씩 올려주고 cnt가 3이면 종료한다.
bingo1 = [list(map(int,input().split()))for i in range(5)] #빙고판 불러오기 (가로 빙고 5개 )
bingo2 = list(map(list,zip(*bingo1))) #빙고판 행렬전환 (세로 빙고 5개)
bingo3 = [];bingo4 = []
for i in range(len(bingo1)) :
bingo3.append(bingo1[i][i]) #빙고 왼쪽 대각선
bingo4.append(bingo2[i][4-i]) #빙고 오른쪽 대각선
bingo = bingo1+bingo2
bingo.append(bingo3)
bingo.append(bingo4) #빙고가 되는 경우의 수 12가지 만들기
lst = []
for i in range(5) :
lst += list(map(int,input().split())) #숫자 불러오기
n = 0
for i in lst :
n +=1
cnt = 0
for j in bingo :
if i in j :
j.remove(i) #숫자가 선언되면 빙고 경우의 수 리스트에서 수를 지우기
if j == [] : #빈 리스트이면 cnt + 1
cnt +=1
if cnt >= 3: #빙고가 세개이면 종료
break
print(n)
Author And Source
이 문제에 관하여([백준] 2578_빙고 python), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@holawan/백준-2578빙고-python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)