[파이썬]백준 2578 빙고

Byeonghyeon Kim·2021년 2월 26일
0

알고리즘문제

목록 보기
20/93
post-thumbnail

링크

백준 2578 빙고


빙고가 완성된것을 어떻게 파악하는지가 중요하다.
처음엔 델타를 사용해 숫자를 불릴때마다 빙고인지 아닌지 검증하려 했는데 코드가 너무 길어지고 읽기싫게 생겼고 좀 너무.. 아닌것같아서 다른방법을 생각했다.
리스트를 하나 만들어서 리스트의 인덱스를 임의로 행과 열로 결정해 숫자가 불릴때마다 해당 행과 열에 맞는 인덱스에 1씩 추가해줬다.
그러다가 5가 되는 순간 빙고가 된 것으로 보고 빙고의 갯수를 추가해줬다.
처음엔 좌상단에서 시작하는 대각선만 고려하고 짜다가 에러가 났다.
생각해보니 우상단에서 시작하는 대각선도 있더라.. 해당 경우도 추가해주니 잘 돌아갔다.


정답 코드

bingo = []
for _ in range(5):
    bingo.append(list(map(int, input().split())))

num = list(map(int, input().split()))
for _ in range(4):
    num += list(map(int, input().split()))

check = [0] * 12 #바뀐것의 갯수 저장하는 리스트 idx0~4는 row / 5~9는 col / 10, 11은 대각
line = 0
flag = False
for n in range(25): #사회자가 하나씩 부른다.
    if flag == True:
        break
    for i in range(5): #빙고탐색
        if flag == True:
            break
        for j in range(5):
            if flag == True:
                break
            if num[n] == bingo[i][j]: #사회자가 부른거 찾으면
                bingo[i][j] = 0 #0 으로 바꾸고
                check[i] += 1 #행 바뀐거 체크
                check[j+5] += 1 #열 바뀐거 체크
                if i == j: #대각
                    check[10] += 1
                if i + j == 4: #반대대각
                    check[11] += 1
                for c in range(12): #바뀐것 갯수 저장하는 리스트 탐색해서
                    if check[c] == 5: #5번 바뀌었으면
                        check[c] = 0 # 초기화시키고
                        line += 1 #빙고처리
                        if line == 3:
                            flag = True
                            break
print(n)

알게된 것👨‍💻

  • 발생할 수 있는 경우들을 잘 생각해서 코드를 짜자
profile
자기 주도 개발전 (개발, 발전)

0개의 댓글